Flask Web 开发 用户认证_2
2016-08-21 20:33
351 查看
下面讲到Flask-Login 这个扩展
要用到这个扩展,就要在模型文件里面添加一些内容了
示例中同时还添加了email 字段。在这个程序中,用户使用电子邮件地址登录,因为相对于用户名而言,用户更不容易忘记自己的电子邮件地址。
Flask-Login 在程序的工厂函数中初始化,如示例8-7 所示。app/__init__.py:初始化Flask-Login
LoginManager 对象的session_protection 属性可以设为None、'basic'或'strong',以提供不同的安全等级防止用户会话遭篡改。设为'strong' 时,Flask-Login 会记录客户端IP
地址和浏览器的用户代理信息,如果发现异动就登出用户。login_view 属性设置登录页面的端点。回忆一下,登录路由在蓝本中定义,因此要在前面加上蓝本的名字。
接下来是保护路由的功能,看了以后一下子没理解是什么作用
为了保护路由只让认证用户访问,Flask-Login 提供了一个login_required 修饰器。用法演示如下:
如果未认证的用户访问这个路由,Flask-Login 会拦截请求,把用户发往登录页面。
先讲后面的吧,后面讲到的是定义表单
app/auth/forms.py:登录表单
下面的代码则是将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>
这样,就能显示出登陆表单的页面了
要用到这个扩展,就要在模型文件里面添加一些内容了
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 LoginManager login_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_required def 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 Form from wtforms import StringField,PasswordField,BooleanField,SubmitField from wtforms.validators import Required,Length,Email class 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 开发 用户认证_3
- Flask Web 开发 用户认证_5
- Flask Web 开发 用户角色
- 网站后端.Flask.实战-社交博客开发-flask-login认证用户?
- Flask Web 开发 用户评论
- iphone开发我的新浪微博客户端-用户登录OAuth授权认证篇(1.3)
- 开发和使用Web用户控件
- MVC用户认证web应用部分三
- MVC用户认证web应用部分四
- android开发我的新浪微博客户端-OAuth认证过程中用WebView代替原来的系统自带浏览器
- 开发和使用Web用户控件
- web工作流管理系统开发之五 开源osworkflow之用户系统改造
- 利用 DSAPI 为 Domino Web 用户定制用户名和口令认证
- bada开发——Web控件的使用及获取用户点击的链接地址
- 利用 DSAPI 为 Domino Web 用户定制用户名和口令认证
- 开发和使用Web用户控件
- MVC用户认证web应用部分二
- 开发和使用Web用户控件(转)
- web开发,是个非常敏捷的过程,变化随时都在产生,用户需求千变万化,许多方面偶然性非常高,较之软件开发,希望用一个架构规划以后的所有设计,是不现实的