首页 > 编程 > Python > 正文

Python的Flask框架中实现登录用户的个人资料和头像的教程

2020-02-23 00:48:21
字体:
来源:转载
供稿:网友

用户资料页面

在用户资料页面,基本上没有什么特别要强调和介绍的新概念。只需要创建一个含有HTML的新视图函数模板页面即可。

下面是视图函数(项目目录/views.py):
 

@app.route('/user/<nickname>')@login_requireddef user(nickname):  user = User.query.filter_by(nickname = nickname).first()  if user == None:    flash('不存在用户:' + nickname + '!')    return redirect(url_for('index'))  posts = [    { 'author': user, 'body': 'Test post #1' },    { 'author': user, 'body': 'Test post #2' }  ]  return render_template('user.html',    user = user,    posts = posts)

这里的@app.route标识主要是用来说明此视图函数不同于之前的那些。我们定义了一个名为<nickname>的参数。在函数里面它会转化成跟它同名的参数,当用户有请求的时候,例如这样的一个URL:URL/user/miguel,次视图函数就会识别为有一个名为nickname值为'miguel'的参数,即nickname = 'miguel'。


没必要为此方法的实现过程感到惊讶。首先我们需要通过把转化后的nickname参数作为条件,尝试着从数据库里把此用户的数据调用出来。如果没有查询到数据,我们就像之前那样,给用户一个错误的提示并且跳转到主页去。

一旦我们找到了改用户,我们就在模板下面来显示该用户的文章。要注意下的是在用户资料页面我们只让显示该用户的文章,所以文章的作者要是该用户。

初始化的视图模板非常的简单(项目目录/templates/user.html):
 

<!-- extend base layout -->{% extends "base.html" %} {% block content %}<h1>用户昵称: {{user.nickname}}!</h1><hr>{% for post in posts %}<p> {{post.author.nickname}} 发布了: <b>{{post.body}}</b></p>{% endfor %}{% endblock %}

用户资料页面就做好了,不过在站点中还没有指向改页面的链接地址。为了让用户很方便的来查看自己的资料信息我们就把链接地址放到最上面的导航上去(项目目录/templates/base.html):


 

<div>Microblog:    <a href="{{ url_for('index') }}">Home</a>    {% if g.user.is_authenticated() %}    | <a href="{{ url_for('user', nickname = g.user.nickname) }}">你的个人资料</a>    | <a href="{{ url_for('logout') }}">退出登陆</a>    {% endif %}  </div>

注意一下我们已经给函数传参了之后的和之前的URL。

现在就来试一试这个项目。点击上面的“你的资料”链接就会跳转到用户资料页面。由于我们还没有指向一个随意用户资料页面的链接地址,所以在这里如果你想看他人的资料,就需要自己手动输入一下地址了。比如你想看miguel的资料,那么地址就是:http://localhost:5000/user/miguelt

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表