当前位置: 首页 > 工具软件 > explore-flask > 使用案例 >

使用flask完善Microblog的功能-创建个人主页

戚令秋
2023-12-01

创建个人主页

user.html模板如下所示:

{% extends "base.html" %}

{% block content %}
    <h1>User: {{ user.username }}</h1>
    <hr>
    {% for post in posts %}
    <p>
    {{ post.author.username }} says: <b>{{ post.body }}</b>
    </p>
    {% endfor %}
{% endblock %}

然后创建视图函数user:

@app.route('/user/<username>')#本例中被<和>包裹的URL <username>是动态的。当一个路由包含动态组件时,Flask将接受该部分URL中的任何文本,并将以实际文本作为参数调用该视图函数。 例如,如果客户端浏览器请求URL /user/susan,则视图函数将被调用,其参数username被设置为'susan' 
@login_required#因为这个视图函数只能被已登录的用户访问,所以我添加了@login_required装饰器。
def user(username):
    user = User.query.filter_by(username=username).first_or_404()#我首先会尝试在数据库中以用户名来查询和加载用户。first_or_404(),当有结果时它的工作方式与first()完全相同,但是在没有结果的情况下会自动发送404 error给客户端。当用户名不存在于数据库中时,函数将不会返回,而是会引发404异常。 如果执行数据库查询没有触发404错误,那么这意味着找到了具有给定用户名的用户。
    posts = [
        {'author': user, 'body': 'Test post #1'},
        {'author': user, 'body': 'Test post #2'}
    ]#为这个用户初始化一个虚拟的用户动态列表
    return render_template('user.html', user=user, posts=posts)#用传入的用户对象和用户动态列表渲染一个新的user.html模板

在base.html添加个人主页入口链接,以便用户轻松查看自己的个人资料。

Microblog:
      <a href="{{ url_for('index') }}">Home</a>
      {% if current_user.is_anonymous %}
      <a href="{{ url_for('login') }}">Login</a>
      {% else %}
      <a href="{{ url_for('user', username=current_user.username) }}">Profile</a># 由于个人主页视图函数接受一个动态参数,所以url_for()函数接收一个值作为关键字参数.由于这是一个指向当前登录个人主页的链接,我可以使用Flask-Login的current_user对象来生成正确的URL。
      <a href="{{ url_for('logout') }}">Logout</a>
      {% endif %}
 类似资料: