博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Flask-Login的使用
阅读量:2442 次
发布时间:2019-05-10

本文共 2221 字,大约阅读时间需要 7 分钟。

Flask-Login的使用

Flask-Login 为 Flask 提供了用户会话管理。它处理了日常的登入,登出并且长时间记住用户的会话。

它会:

在会话中存储当前活跃的用户

ID,让你能够自由地登入和登出。

让你限制登入(或者登出)用户可以访问的视图。

处理让人棘手的 “记住我” 功能。

可以与以后可能使用的 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_loaderdef 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_requireddef settings():    pass

当用户要登出时:

@app.route("/logout")@login_requireddef logout():    logout_user()    return redirect(somewhere)

转载地址:http://ttcqb.baihongyu.com/

你可能感兴趣的文章
推荐一款 Linux 上比较漂亮的字体(转)
查看>>
在Linux中添加新的系统调用(转)
查看>>
Fedora Core 5.0 安装教程{下载}(转)
查看>>
把ACCESS的数据导入到Mysql中(转)
查看>>
shell里边子函数与主函数的实例(转)
查看>>
Linux中MAXIMA符号运算软件的简介(转)
查看>>
银行选择Linux 则无法回避高成本(转)
查看>>
上网聊天需要防范的几大威胁(转)
查看>>
[分享]后门清除完全篇(转)
查看>>
用php在linux下连接mssql2000(转)
查看>>
让你的Linux支持WEB修改密码(转)
查看>>
MYSQL的master/slave数据同步配置(转)
查看>>
一个完整的ftp远程批量shell(转)
查看>>
Vsftpd匿名无法上传,配置如下,帮忙找下原因,谢谢~!(转)
查看>>
crontab命令简介(转)
查看>>
C++中的静态联编和动态联编介绍(转)
查看>>
带有农历的日历(QT版本1752-2100)(转)
查看>>
LINUX的系统内核空间的保护(转)
查看>>
在Visual C++中利用UDL文件建ADO连接(转)
查看>>
C++编程批评系列 继承的本质(转)
查看>>