zoukankan      html  css  js  c++  java
  • flask_login

    一、配置

    对于登录系统,我们将会使用到两个扩展,Flask-Login 和 Flask-OpenID。在microblog.py中配置:

    Flask-OpenID 扩展需要一个存储文件的临时文件夹的路径。对此,我们提供了一个 tmp 文件夹的路径。

    二、重构用户模型

    Flask-Login 扩展需要在我们的 User 类中实现一些特定的方法。但是类如何去实现这些方法却没有什么要求。

    s_authenticated 方法有一个具有迷惑性的名称。一般而言,这个方法应该只返回 True,除非表示用户的对象因为某些原因不允许被认证。

    is_active 方法应该返回 True,除非是用户是无效的,比如因为他们的账号是被禁止。

    is_anonymous 方法应该返回 True,除非是伪造的用户不允许登录系统。

    最后,get_id 方法应该返回一个用户唯一的标识符,以 unicode 格式。我们使用数据库生成的唯一的 id。需要注意地是在 Python 2 和 3 之间由于 unicode 处理的方式的不同我们提供了相应的方式。

    三、user_loader回调

    首先,我们必须编写一个函数用于从数据库加载用户。这个函数将会被 Flask-Login 使用(文件 microblog.py):

    注:在 Flask-Login 中的用户 ids 永远是 unicode 字符串,因此在我们把 id 发送给 Flask-SQLAlchemy 之前,把 id 转成整型是必须的,否则会报错!

    四、编写登录函数(microblog.py)

    (1)这里我们在登录函数中添加了一个新的装饰器@oid.loginhandler告诉 Flask-OpenID 这是我们的登录函数。

    (2)在函数开始的时候,我们检查 g.user 是否被设置成一个认证用户,如果是的话将会被重定向到首页。

    (3)Flask 中的 g 全局变量是一个在请求生命周期中用来存储和共享数据。

    (4)在 redirect 调用中使用的 url_for 函数是定义在 Flask 中,以一种干净的方式为一个给定的视图函数获取 URL。

    (5)我们把 remember_me 布尔值存储到 flask 的会话中,flask.session 提供了一个更加复杂的服务对于存储和共享数据。一旦数据存储在会话对象中,在来自同一客户端的现在和任何以后的请求都是可用的。数据保持在会话中直到会话被明确地删除。

    (6)oid.try_login 被调用是为了触发用户使用 Flask-OpenID 认证。该函数有两个参数,用户在 web 表单提供的 openid 以及我们从 OpenID 提供商得到的数据项列表。因为我们已经在用户模型类中定义了 nickname和 email,这也是我们将要从 OpenID 提供商索取的。

    (7)OpenID 认证异步发生。如果认证成功的话,Flask-OpenID 将会调用一个注册了 oid.after_login 装饰器的函数。如果失败的话,用户将会回到登陆页面。

    五、Flask-OpenID登录回调(microblog.py)

    (1)resp 参数传入给 after_login 函数,它包含了从 OpenID 提供商返回来的信息。

    (2)登录成功后,将登录账户的用户名和邮箱存到数据库的用户表里,最后重定向到首页

    (3)接下来我们需要告诉Flask_Login哪个函数允许用户登录

    六、全局变量g.user(microblog.py)

    (1)任何使用了 before_request 装饰器的函数在接收请求之前都会运行。

    (2)全局变量 current_user 是被 Flask-Login 设置的,因此我们只需要把它赋给 g.user ,让访问起来更方便。有了这个,所有请求将会访问到登录用户,即使在模版里。

    七、首页视图(microblog.py)

    这里我们做了两处改变

    (1)添加了 login_required 装饰器。这确保了这页只被已经登录的用户看到。

     (2)我们把 g.user 传入给模版,代替之前使用的伪造对象。

    八、登出

    (1)在microblog.py文件中加入登出函数

    (2)将登出连接放到base.html中

    九、运行看实现效果 :python microblog.py

    注:这里我注册了一个yahoo账号,登录的时候比较慢

    成功之后返回到首页(index),并将登录账户存到数据库中

  • 相关阅读:
    QString和char字符串数组之间的转换 (转)
    RadioGroup 的 RadioButton 选择改变字体颜色和背景颜色
    Android学习笔记:TabHost 和 FragmentTabHost
    关于JDNI、JMX
    Oracle中查看所有的表,用户表,列名,主键,外键
    如何对行 表 数据库加锁
    android网络优化
    深入java虚拟机
    马拉拉:被塔利班追杀的女孩
    Oracle---->基本DDL
  • 原文地址:https://www.cnblogs.com/ninicwang/p/6004571.html
Copyright © 2011-2022 走看看