1. 安装;

pip install flask_login

2. 使用:

  • 注册应用
import os
from flask_login import LoginManager, current_user login_manager = LoginManager()
login_manager.login_view = 'users.login' # 未登录作的跳转视图
login_manager.session_protection = 'strong'
login_manager.login_message = u"Bonvolu ensaluti por uzi tiun paĝon." # 设置快闪消息,用于提示用户 app = Flask(__name__) app.secret_key = os.urandom() login_manager.init_app(app)
  • 自定义的 User 类需要提供一下属性:

    • is_authenticated : 用来判断是否是已经授权了,如果通过授权就会返回true
    • is_active : 判断是否已经激活,可用
    • is_anonymous : 判断是否是匿名用户
    • get_id() : 返回用户的唯一标识
class UserInfo(Model):
__tablename__ = "report_user"
id = Integer('id')
user_id = BigInt('user_id', primary_key=True)
union_id = BigInt('union_id')
name = String('name')
status = Integer('status', default=)
last_login_time = String('last_login_time', default=datetime.now)
last_update_by = BigInt('last_update_by')
create_time = Datetime('create_time', default="datetime.now") @property
def is_authenticated(self):
return self.status == @property
def is_anonymous(self):
return self.status == @property
def is_active(self):
if self.status is None:
self.rQuery.Select("status").Where('chart_id=%s', [self.group_id])
return self.status != def get_id(self):
return self.user_id

3. 以 cookie 和 session 方式登录

  • 配置: 通过 session 中的信息导入用户实例
@login_manager.user_loader
def load_user(user_id):
print("user_id =", user_id)
msg = UserInfo.load_by_user_id(user_id)
if user:
user = UserInfo.to_model(msg)
else:
print("no found =", msg)
     user = msg
return user
  • 登录与退出

    • 登录: 通过 login_user(user), 把用户信息设置到 session 中
    • 登出: 通过 logout_user(), 清除此保存在缓冲中的cookie 和 session 中的信息

4. 自定义以请求信息头部或者传递的参数作为键值

  这种情况下,使用 request_loader 回调,与 user_loader 回调原理一样,但是它不是接受user_id

@login_manager.request_loader
def load_user_from_request_by_args(request):   # 使用 api 参数,或者 post 携带的键值
  union_id = request.args.get('union_id')
  if union_id:
  user = User.query.filter_by(union_id=union_id).first()
  return user
@login_manager.request_loader
def load_user_from_request_by_headers(request):   # 使用 请求头部 headers 携带的键值
  field = request.headers.get('Authorization')
  if field:
   union_id = field.replace('Basic ', '', )
  try:
   union_id = base64.b64decode(union_id)
  except TypeError:
   pass
  user = User.query.filter_by(union_id=union_id).first()
  return user
  • 登录、登出 不需要login_user() 和logout_user()

5. 参考:

  • 官方:http://www.pythondoc.com/flask-login/index.html#authorization-header

利用自定义 ORM 下使用 flask-login 做登录校验使用笔记的更多相关文章

  1. JWT生成Token做登录校验

    一.JWT的优点 1.服务端不需要保存传统会话信息,没有跨域传输问题,减小服务器开销. 2.jwt构成简单,占用很少的字节,便于传输. 3.json格式通用,不同语言之间都可以使用. 二.使用JWT进 ...

  2. 国服最强JWT生成Token做登录校验讲解,看完保证你学会!

    转载于:https://blog.csdn.net/u011277123/article/details/78918390 Free码农 2017-12-28 00:08:02 JWT简介 JWT(j ...

  3. Linux系统下利用wget命令把整站下载做镜像网站

    Linux系统下利用wget命令把整站下载做镜像网站 2011-05-28 18:13:01 | 1次阅读 | 评论:0 条 | itokit  在linux下完整的用wget命令整站采集网站做镜像 ...

  4. virtualenv 环境下 Nginx + Flask + Gunicorn+ Supervisor 搭建 Python Web

    在这篇文章里,我们将搭建一个简单的 Web 应用,在虚拟环境中基于 Flask 框架,用 Gunicorn 做 wsgi 容器,用 Supervisor 管理进程,然后使用 Python 探针来监测应 ...

  5. 利用自定义的AuthenticationFilter实现Basic认证

    [ASP.NET MVC] 利用自定义的AuthenticationFilter实现Basic认证   很多情况下目标Action方法都要求在一个安全上下文中被执行,这里所谓的安全上下文主要指的是当前 ...

  6. 转:【译】Asp.net MVC 利用自定义RouteHandler来防止图片盗链

    [译]Asp.net MVC 利用自定义RouteHandler来防止图片盗链   你曾经注意过在你服务器请求日志中多了很多对图片资源的请求吗?这可能是有人在他们的网站中盗链了你的图片所致,这会占用你 ...

  7. CSS自定义select下拉选择框(不用其他标签模拟)

    今天群里有人问到怎么自定义select下拉选择框的样式,于是群里就展开了激烈的讨论,刚开始一直就是考虑怎样使用纯CSS实现,把浏览器默认的样式覆盖掉,但最后均因兼容问题处理不好而失败告终,最后的解决方 ...

  8. java利用自定义类型对树形数据类型进行排序

    前言 为什么集合在存自定义类型时需要重写equals和hashCode? 1.先说List集合 List集合在存数据时是可以重复的但是 当我们需要判断一个对象是否在集合中存在时这样就有问题了! 因为我 ...

  9. 20155211 课下测试ch12补做

    20155211 课下测试ch12补做 有关线程图,下面说法正确的是() A.图的原点表示没有任何线程完成一条指令的初始状态 B.向右向上是合法的转换 C.向左向下是合法的转换 D.对角线是合法的转换 ...

随机推荐

  1. php命名空间的设计思想和缺点

    相比C#等语言,你可以在PHP函数里面随意定义变量并赋值,而不用担心覆盖了全局变量,或者类变量:你也可以随意的定义类变量,而不用担心会和函数名冲突,因为变量前面都有个$. php的命名空间和全局变量. ...

  2. Hadoop HBase概念学习系列之HBase里的存储数据流程(二十三)

    这个,很简单,但凡是略懂大数据的,就很清楚,不多说,直接上图.

  3. ascii2native 转码 解码

    //把十六进制的编码转为原码function asciiHex2native(strAscii) { var output = ""; var posFrom = 0; var p ...

  4. using指令都用了这么多年了,其实还真没懂!

    在C语言中,我们经常使用#include<stdio.h>指令来导入标准输入输出库,这确实很好理解,相当于把代码复制到当前的程序中. 但在C#语言中,当我们写Console程序时,经常在第 ...

  5. P2607 [ZJOI2008]骑士

    题目描述 Z国的骑士团是一个很有势力的组织,帮会中汇聚了来自各地的精英.他们劫富济贫,惩恶扬善,受到社会各界的赞扬. 最近发生了一件可怕的事情,邪恶的Y国发动了一场针对Z国的侵略战争.战火绵延五百里, ...

  6. Redis(五)主从复制

    本文转载自编程迷思,原文链接 深入学习Redis(3):主从复制 前言 在前面的两篇文章中,分别介绍了Redis的内存模型和Redis的持久化. 在Redis的持久化中曾提到,Redis高可用的方案包 ...

  7. Android攻城狮学习笔记—入门篇三

    第十章 CheckBox 与其他控件类似 有自己的监听方法 实现监听 并定义被选中或取消后的操作 第十一章 RadioGroup和RadioButton RadioGroup是RadioButton的 ...

  8. iOS 基础函数解析 - Foundation Functions Reference

    iOS 基础函数解析 - Foundation Functions Reference 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名- ...

  9. DBlink的创建与删除

    创建方式一: create [public] database link link名称 connect to 对方数据库用户identified by 对方数据库用户密码 using  '对方数据库i ...

  10. js 继承的几种方式

    JS继承的实现方式: 既然要实现继承,那么首先我们得有一个父类,代码如下: function Animal(name) { // 属性 this.name = name || '小白'; // 实例方 ...