Flask Web 开发 用户认证_2
来源:互联网 发布:阿里云青岛服务器地址 编辑:程序博客网 时间:2024/05/19 00:56
下面讲到Flask-Login 这个扩展
要用到这个扩展,就要在模型文件里面添加一些内容了
app/models.py:修改User 模型,支持用户登录
class User(UserMixin,db.Model):__tablename__='users'id=db.Column(db.Integer,primary_key=True)email=db.Column(db.String(64),unique=True,index=True)username=db.Column(db.String(64),unique=True,index=True)role_id = db.Column(db.Integer, db.ForeignKey('roles.id'))password_hash=db.Column(db.String(128))
示例中同时还添加了email 字段。在这个程序中,用户使用电子邮件地址登录,因为相对于用户名而言,用户更不容易忘记自己的电子邮件地址。
Flask-Login 在程序的工厂函数中初始化,如示例8-7 所示。app/__init__.py:初始化Flask-Login
from flask.ext.login import LoginManagerlogin_manager = LoginManager()login_manager.session_protection = 'strong'login_manager.login_view = 'auth.login'def create_app(config_name):# ...login_manager.init_app(app)# ...
LoginManager 对象的session_protection 属性可以设为None、'basic'或'strong',以提供不同的安全等级防止用户会话遭篡改。设为'strong' 时,Flask-Login 会记录客户端IP
地址和浏览器的用户代理信息,如果发现异动就登出用户。login_view 属性设置登录页面的端点。回忆一下,登录路由在蓝本中定义,因此要在前面加上蓝本的名字。
接下来是保护路由的功能,看了以后一下子没理解是什么作用
为了保护路由只让认证用户访问,Flask-Login 提供了一个login_required 修饰器。用法演示如下:
from flask.ext.login import login_required@auth.route('/logout')@login_requireddef logout():logout_user()flash('You have been logged out.')return redirect(url_for('main.index'))
如果未认证的用户访问这个路由,Flask-Login 会拦截请求,把用户发往登录页面。
先讲后面的吧,后面讲到的是定义表单
app/auth/forms.py:登录表单
from flask.ext.wtf import Formfrom wtforms import StringField,PasswordField,BooleanField,SubmitFieldfrom wtforms.validators import Required,Length,Emailclass LoginForm(Form):email = StringField('Email',validators=[Required(),Length(1,64),Email()])password = PasswordField('Password',validators=[Required()])remember_me = BooleanField('Keep me logged in')submit = SubmitField('Log In')
下面的代码则是将sign in和sign out添加进网页里面
app/templates/base.html:导航条中的Sign In 和Sign Out 链接
<ul class="nav navbar-nav navbar-right">
{% if current_user.is_authenticated %} #这里尤其要注意一下,authenticated后面,不需要再加括号了,flask-login新版本里都不需要,老版本要
<li><a href="{{ url_for('auth.logout') }}">Sign Out</a></li>
{% else %}
<li><a href="{{ url_for('auth.login') }}">Sign In</a></li>
{% endif %}
</ul>
这样,就能显示出登陆表单的页面了
- Flask Web 开发 用户认证_2
- Flask Web 开发 用户资料_2
- Flask Web 开发 用户评论_2
- Flask Web 开发 用户认证
- Flask Web 开发 用户认证_3
- Flask Web 开发 用户认证_4
- Flask Web 开发 用户认证_5
- Flask Web 开发 用户认证_6
- 《flask web开发》第八章 用户认证
- Flask Web 开发 Web表单_2
- flask web开发-用户认证代码分析(三)
- flask-web开发-用户认证代码分析(四)
- Flask Web 开发 博客文章_2
- Flask Web 开发 关注者_2
- [python3.6 flask web学习]Flask用户认证框架
- Flask Web 开发 用户角色
- Flask Web 开发 用户资料
- Flask Web 开发 用户评论
- opencv3.0程序在debug下可以运行,在release下运行报cv::exception错误问题
- poj3723Conscription
- 设计模式-备忘录模式
- MySQL 解密 --> 如何查看二进制日志ROW模式下最原始的SQL语句
- linux下c编程进程通信-管道与信号
- Flask Web 开发 用户认证_2
- DBCP连接池配置详解
- libsvm-matlab实例代码
- emacs24 plugins 配置
- SAX解析
- shell中正则表达式的使用
- Docker常用操作汇总
- Service
- 树的子结构