Flask之用户登录

作者: welkinz | 来源:发表于2017-05-02 21:57 被阅读0次

使用会话

使用会话对象是Flask中实现身份认证的一种方式。会话(session)让服务端可以通过一种简单的方式,在用户浏览器的cookie中保存信息。保存的信息通过应用的密钥进行了加密签名,如果用户试图修改cookie的值,那么签名就会失效。

往会话中添加数据很简单,只需要

session['key'] = data

若要读取数据,则可以

session['key']

要让用户处于登录状态,则可以向会话里添加一个username属性,并且设为当前用户的用户名:

@main_blueprint.route('/login', methods=['GET', 'POST'])
def login():
    form = LoginForm()
    if form.validate_on_submit():
        session['username'] = form.username.data
    return render_template('login.html', form=form)

若使用户登出,则可以调用pop方法移除该属性:

session.pop('username', None)

要判断当前用户是否处于登录状态,则可以在视图函数中检查会话里是否有username属性,比如新建文章视图:

@blog_blueprint.route('/new', methods=['GET', 'POST'])
def new_post():
    if 'username' not in session:
        return redirect(url_for('main.login'))
    ...

如果其它模板也需要知道当前用户的信息,我们可以在开始响应每个请求之前,在blog蓝图中检查会话对象,里面若存在username,就把该对象添加到g对象上,这样就可以在模板中访问了:

@blog_blueprint.before_request
def check_user():
    if 'username' in session:
        g.current_user = User.query.filter_by(
            username=session['username']).first()
    else:
        g.current_user = None

这样我们可以把前面的new_post修改一下:

def new_post():
    if not g.current_user:
        ...

现在,我们已经实现里简单的用户登录的验证机制。但是,还有一些功能没有实现,比如用户的权限分级,登录时没有“记住我”的功能。要实现这些,我们可以使用flask-login扩展。

使用Flask Login

Flask-Login用来管理已登录用户的用户会话,主要有以下几个方法:

  • load_user() 本函数的参数是要登录的用户,以及可选的“记住我”布尔值。(如果值为False,那么关闭浏览器后用户会话就会过期。如果值为True,那么会在浏览器中写入一个长期有效的cookie,使用这个cookie可以复现用户会话。)
  • logout_user() 删除并重设用户会话。
  • is_active() 如果允许用户登录,必须返回True,否则返回False。
  • is_authenticated() 如果用户已经登录,必须返回True,否则返回False。
  • is_anonymous() 对普通用户返回False。

Flask Login还提供了一个 current_user 代理对象来访问当前的登录用户。这个代理对象在视图和模板都是可以访问的。所以我们在博客蓝图中自定义的 before_request 函数就可以删掉了,而且对 g.current_user 的调用可以改为 current_user 。

相关文章

  • 【Python】Flask + MySQL 实现用户注册,登录和

    今天用Flask + MySQL 实现用户注册,登录和登出。 一、实战场景 Flask 框架实现用户的注册,登录和...

  • Flask-Login 官方文档学习过程记录

    简介 Flask-Login是Flask中用于用户session管理(用户状态管理)的一个模块,它处理用户登录、注...

  • Flask中的flask_login

    Flask- login为Flask提供了用户会话管理。它处理登录、注销和长时间记住用户会话等常见任务。 安装 L...

  • Flask之用户登录

    使用会话 使用会话对象是Flask中实现身份认证的一种方式。会话(session)让服务端可以通过一种简单的方式,...

  • Flask之用户登录

    关于Flask-Login的用例 重访我们的用户模型 Flask-Login扩展需要在我们的User类里实现一些方...

  • 二、Flask笔记-认证登录

    • Flask-Login: 管理已登录用户的用户会话。• Werkzeug: 计算密码散列值并进行核对。• it...

  • 使用Flask开发简单接口(2)--POST请求接口

    今天我们继续学习如何使用Flask开发POST接口:用户注册接口和用户登录接口。 request接收参数 当我们在...

  • Flask Signal踩坑总结

    0.前言: 最近使用flask搭建博客实现登录时,碰到登录用户无法分配Permissions的问题,整整花了一个星...

  • Flask 入门-(三)Form表单提交

    前言 在web程序中,form表单应用广泛, 比如用户登录, 像QQ登录这种的实现。本文采用Flask实现简单的F...

  • Flask-Login详解

    关于Flask登录认证的详细过程请参见拙作<<使用Flask实现用户登陆认证的详细过程>>一文,而本文则偏重于详细...

网友评论

    本文标题:Flask之用户登录

    本文链接:https://www.haomeiwen.com/subject/ydphtxtx.html