现在我们来设计一个用户中心的页面,显示用户相关的信息,由于我们的Q&A demo比较简单,所以显示的内容也不用太多,我们来显示用户的头像、注册时间、发表的问题数和评论数,设计一个user.html
,界面如下:
用户的头像或其他信息都可以通过上下文管理器返回的login_user
去获取,发布问答和评论数直接在模板里使用length
过滤器,之前的文章都有类似的部分。这个页面通过点击导航条的用户进去,对应的url
是'/user/'
,视图函数为user_center
,直接render
即可。
再增加一个修改密码的页面security.html
,界面和注册的页面是一致的,因此直接对register.html
做一些简单修改即可,如下:
修改密码页面对应的url
是'/user/security/'
,视图函数为security
,设计好页面后先直接render
即可,以便看看效果。通过点击user
页面的修改密码
进入,因此对user
页面的修改密码
这个button
增加onclick
属性如下:
<button type="submit" class="btn btn-primary btn-block" onclick="location='{{ url_for('security') }}'">
修改密码
</button>
此时页面已经可以发送POST
数据了,再为视图函数添加POST
方法,最终security
视图函数如下:
def security():
if request.method == 'GET':
return render_template('security.html')
else:
o_password = request.form.get('o_password')
password1 = request.form.get('password1')
password2 = request.form.get('password2')
validate_func(o_password, password1, password2)
g.user.password = generate_password_hash(password1)
db.session.commit()
return redirect(url_for('logout'))
获取到旧的密码以及两次新的密码之后,对其进行验证,例如旧密码是否正确,新密码长度是否足够、两次是否一样等,我这里用validate_func做的验证(实际还没写这个函数),验证成功之后直接用g.user.password = generate_password_hash(password1)
修改密码,并用db.session.commit()
提交到数据库,之后对当前用户进行注销,用户使用新密码即可登录,这一部分就完成了。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。