Flask Web 开发 用户认证_3

来源:互联网 发布:psv舰队 淘宝 编辑:程序博客网 时间:2024/05/18 21:46

继续上一篇

提交表单后,你需要让程序将登录用户的信息保持住

所以,用到了login_user功能

login_user会把在用户会话中把用户标记为已登录,而第二个参数则是勾选是否保持登录状态,如果不勾选,则关闭浏览器后登录状态丢失


提交登录密令的POST 请求最后也做了重定向,不过目标URL 有两种可能。用户访问未授权的URL 时会显示登录表单,Flask-Login会把原地址保存在查询字符串的next 参数中,这个参数可从request.args 字典中读取。如果查询字符串中没有next 参数,则重定向到首页。如果用户输入的电子邮件或密码不正确,程序会设定一个Flash 消息,再次渲染表单,让用户重试登录。




接着我们需要渲染登录页面的模板如下

{% extends "base.html" %}
{% import "bootstrap/wtf.html" as wtf %}
{% block title %}Flasky - Login{% endblock %}
{% block page_content %}
<div class="page-header">
 <h1>Login</h1>
</div>

<div class='col-md-4'>
 {{ wtf.quick_form(form) }}
</div>
{% endblock %}


而对于登出功能,则需要将路由转换成

from flask.ext.login import logout_user, login_required
@auth.route('/logout')
@login_required                                  #这句不是很理解,晚点再继续看
def logout():
logout_user()
flash('You have been logged out.')
return redirect(url_for('main.index'))     #这里转向的是main.index这个端点对应的页面


最后,更新一下首页,然跳转回来的页面可以显示成欢迎页面,其实也就是用了一个if语句,看用户是否认证,如果认证的话,将stranger变成用户名字

{% extends "base.html" %}
{% import "bootstrap/wtf.html" as wtf %}
{% block title %}Flasky{% endblock %}
{% block page_content %}
<div class="page-header">
<h1>
Hello,
{% if current_user.is_authenticated %}
{{ current_user.username }}
{% else %}
Stranger!
{% endif %}
</h1>
</div>

{% endblock %}


因为还未创建用户注册功能,所以新用户可在shell 中注册:
(venv) $ python manage.py shell
>>> u = User('xxxxx@qq.com', username='allen', password='cat')
>>> db.session.add(u)
>>> db.session.commit()

这里注意,做commit()之前,务必先更新一下数据库,不然的话,他会报警没有email这一Column







0 0
原创粉丝点击