Flask-Login的使用
2017-08-02 10:32
190 查看
Flask-Login的使用
Flask-Login
为 Flask 提供了用户会话管理。它处理了日常的登入,登出并且长时间记住用户的会话。
它会:
在会话中存储当前活跃的用户
ID,让你能够自由地登入和登出。
让你限制登入(或者登出)用户可以访问的视图。
处理让人棘手的 “记住我” 功能。
帮助你保护用户会话免遭 cookie 被盗的牵连。
可以与以后可能使用的
Flask-Principal 或其它认证扩展集成。
配置应用
对一个使用
Flask-Login 的应用最重要的一部分就是 LoginManager 类。你应该在你的代码的某处为应用创建一个,像这样:
login_manager = LoginManager()
登录管理(login
manager)包含了让你的应用和 Flask-Login 协同工作的代码,比如怎样从一个 ID 加载用户,当用户需要登录的时候跳转到哪里等等。
一旦实际的应用对象创建后,你能够这样配置它来实现登录:
login_manager.init_app(app)
它是如何工作
你必须提供一个
user_loader 回调。这个回调用于从会话中存储的用户 ID 重新加载用户对象。它应该接受一个用户的 unicode ID 作为参数,并且返回相应的用户对象。比如:
@login_manager.user_loader def load_user(userid): return User.get(userid)
如果
ID 无效的话,它应该返回 None (而不是抛出异常)。(在这种情况下,ID 会被手动从会话中移除且处理会继续)
你的用户类
你用来表示用户的类需要实现这些属性和方法:
is_authenticated
当用户通过验证时,也即提供有效证明时返回
True 。(只有通过验证的用户会满足 login_required 的条件。)
is_active
如果这是一个活动用户且通过验证,账户也已激活,未被停用,也不符合任何你
的应用拒绝一个账号的条件,返回 True 。不活动的账号可能不会登入(当然, 是在没被强制的情况下)。
is_anonymous
如果是一个匿名用户,返回 True
。(真实用户应返回 False 。)
get_id()
返回一个能唯一识别用户的,并能用于从
user_loader 回调中加载用户的 unicode 。注意着 必须 是一个 unicode —— 如果 ID 原本是 一个 int 或其它类型,你需要把它转换为 unicode 。
要简便地实现用户类,你可以从
UserMixin 继承,它提供了对所有这些方法的默认 实现。(虽然这不是必须的。)
Login 示例
一旦用户通过验证,你可以使用
login_user 函数让用户登录。例如:
@app.route('/login', methods=['GET', 'POST']) def login(): """ 这里我们使用某种类型来表示和验证我们 客户端表单数据。例如,WTForms是一个将会出现的库 为我们处理这个问题,我们使用自定义的LoginForm来验证 """ form = LoginForm() if form.validate_on_submit(): """ 登录并验证用户。 用户应该是“用户”类的一个实例 """ login_user(user) flask.flash('Logged in successfully.') next = flask.request.args.get('next') """ next_is_valid应该检查用户是否有效 访问“下一个”url的权限 """ if not next_is_valid(next): return flask.abort(400) return flask.redirect(next or flask.url_for('index')) return flask.render_template('login.html', form=form)
就这么简单。你可用使用
current_user 代理来访问登录的用户,在每一个模板中都可以使用 current_user:
{% if current_user.is_authenticated() %} Hi {{ current_user.name }}! {% endif %}
需要用户登入 的视图可以用
login_required 装饰器来装饰:
@app.route("/settings") @login_required def settings(): pass
当用户要登出时:
@app.route("/logout") @login_required def logout(): logout_user() return redirect(somewhere)
他们会被登出,且他们会话产生的任何
cookie 都会被清理干净
相关文章推荐
- Flask-Login的使用
- Flask-Login使用教程
- Flask-Login 使用和进阶
- flask-login的使用3
- Flask Web开发入门(二)之Flask-Login使用
- 用户认证(二)【使用Flask-Login认证用户】
- 使用Flask-Login实现token验证和超时失效使用体会
- 用 Flask 来写个轻博客 (24) — 使用 Flask-Login 来保护应用安全
- [Python][flask][flask-login]关于flask-login中各种API使用实例
- flask-login使用笔记
- Flask-Login 使用和进阶
- flask-bootstrap使用 - 结合flask-nav和bootstrapcdn
- flask-uploads扩展的使用
- flask蓝图的使用
- Django 使用@login_required限制登录
- Flask使用SQLAlchemy时报字符集错误处理
- Python使用Flask搭建RESTful API
- flask扩展模块flask-sqlachemy 的使用---mysql数据库
- 在Python的Flask框架下使用sqlalchemy库的简单教程
- Flask 上传自定义头像_1 使用Flask Uploads