一、配置

对于登录系统,我们将会使用到两个扩展,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),并将登录账户存到数据库中

flask_login的更多相关文章

  1. flask_login 整合 pyjwt + json 简易flask框架

    现在很多框架都实现前后端分离,主要为了适应以下几个目的: 1,前后端的分离,可以使前端开发和后端开发更加分工明确,而不是后端还需要在视图模板中加入很多{% XXXX %}标签 2,是为了适应跨域调用或 ...

  2. [flask]flask_login模块,session及其他

    读flask源码的时候,有一点一直到现在都没有一个清晰的概念,比如四个全局变量g,current_app,session,request是怎么做到的 按照查到的资料里面的说法,为了不至于每次都主动调用 ...

  3. flask 对于用户登录保持状态 flask_login

    先加载flask_login ext.py  在app下的__init__.py 进行引用把,我就不写了 login_manager = LoginManager() # 如果没有登录则重定向到该蓝图 ...

  4. Flask中mongodb实现flask_login保持登录

    最近在学习Flask,使用flask-login时,一直无法完成保持登录的状态,网上的例子都是使用SQLAlchemy,但是我用的是mongodb. 网上的例子使用SQLAlchemy时,定义User ...

  5. flask的session解读及flask_login登录过程研究

    #!/usr/bin/env python # -*- coding: utf-8 -*- from itsdangerous import URLSafeTimedSerializer from f ...

  6. flask_admin+flask_login 整合,jieba分词+echarts数据分析可视化

    项目地址: https://github.com/WES6/list

  7. flask_单元测试

    我们现在可以试着在控制台向数据库添加一个用户: In[2]: import model; In[3]: from microblog import db; In[4]: u=model.User(ni ...

  8. [Python][flask][flask-login]关于flask-login中各种API使用实例

    本篇博文跟上一篇[Python][flask][flask-wtf]关于flask-wtf中API使用实例教程有莫大的关系. 简介:Flask-Login 为 Flask 提供了用户会话管理.它处理了 ...

  9. [Python][flask][flask-wtf]关于flask-wtf中API使用实例教程

    简介:简单的集成flask,WTForms,包括跨站请求伪造(CSRF),文件上传和验证码. 一.安装(Install) 此文仍然是Windows操作系统下的教程,但是和linux操作系统下的运行环境 ...

随机推荐

  1. c++Builder XE6 MD5 加密算法 BASE64 URL 编码

    xe6,xe7 BASE64XE6 MD5 加密算法Delphifunction MD5(const texto: string): string; var idmd5: TIdHashMessage ...

  2. 创建一个多进程(multiprocessing.Process)

    进程是资源的集合,每个进程至少包含一个线程 import multiprocessing #导入进程模块import time, threading #导入线程 def thread_run(): p ...

  3. Error 2503 and 2502 when installing/uninstalling on Windows 10

    1. Hold Ctrl+Shift and press Esc. 2. Locate “Windows Explorer” under “Windows processes”, now right ...

  4. 生产者和消费者模式--java设计模式

    生产者和消费者: 就犹如在快餐店点餐一样,有多个打饭的,有不定时的人来买饭,买饭的人从快餐店自动取餐,如果快餐的库存数量达到下限值时,自动启动打饭的,补充盒饭. 通过while循环的方式,传入变量is ...

  5. SpringMvc Intercetor

    对于登录的访问控制以及session的超时控制. 当用户在未登录情况下,直接在地址栏输入url进入某些页面时,会越过登录页,如果不做控制会有安全问题. 因此可添加拦截器处理异常: /** * @Des ...

  6. 8 python time$datetime

    1.表示时间的方式 (1)时间戳 时间戳(timestamp)的方式:通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量. 我们运行“type(time.time())” ...

  7. hadoop配置文件的参数含义说明

    #hadoop version 查看版本号 1 .获取默认配置 hadoop2系列配置文件一共包括6个,分别是hadoop-env.sh.core-site.xml.hdfs-site.xml.map ...

  8. 漫画描述HDFS工作原理

    作者不详,内容浅显易懂,特拿来与大家分享.

  9. Session的作用和使用场景

    1.session何时被创建? 客户首次访问服务器时,回话session对象被创建并分配一个唯一的Id,同时id号发送到客户端,并存入cookie,使得客户端session对象和服务器端一致. 2.如 ...

  10. Delphi 操作键盘按下和释放操作

    Unit Unit1; Interface Uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ...