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. [转]JMX的Hello World

    这篇写的很详尽了: http://www.blogjava.net/hengheng123456789/articles/65690.html

  2. Result工具类

    使用ajax请求访问时,可以用此工具类作为返回对象,也方便统一代码规范 package com.ujia.entity; import java.io.Serializable; public cla ...

  3. Python time.md

    time模块 Comparing Clocks time.clock():在Unix 上,返回当前的处理器时间,以浮点数秒数表示. time.monotonic():返回一个单调时钟的值(在分秒内), ...

  4. [USACO09OPEN]Ski Lessons

    嘟嘟嘟 先考虑这两点: 1.如果我们有结束时间相同的课程,且达到的能力相同,那么我们一定选择开始时间最晚的. 2.如果有能力值相同的滑雪坡,我们一定选择时间最短的. 因此先预处理两个数组.cla[i] ...

  5. Day15 集合(二)

    Set简介 定义 public interface Set<E> extends Collection<E> {} Set是一个继承于Collection的接口,即Set也是集 ...

  6. OpenStack Grizzly详细安装指导

    一.环境介绍: 控制节点 eth0 (10.10.10.51), eth1 (192.168.100.51) 网络节点 eth0 (10.10.10.52), eth1 (10.20.20.52), ...

  7. Threadpool python3

    from concurrent.futures import ThreadPoolExecutor,ALL_COMPLETED,wait,as_completedimport time def add ...

  8. HDU 2141 Can you find it? (二分)

    题目链接: Can you find it? Time Limit: 10000/3000 MS (Java/Others)    Memory Limit: 32768/10000 K (Java/ ...

  9. android创建目录和文件和安装其它apk

    一.android下创建目录 File sd=Environment.getExternalStorageDirectory(); String path=sd.getPath()+"/no ...

  10. iOS UITextField的代理<UITextFieldDelegate>的几点笔记

    今天做项目的时候,有个需求,点击按钮,就在特定的编辑框输入按钮中的文字,一开始我还以C++的思想来写,先获取光标的位置,然后在判断是否在那个编辑框,进行输入.后来我旁边的同事看到了直接教我用代理方法, ...