利用自定义 ORM 下使用 flask-login 做登录校验使用笔记
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 做登录校验使用笔记的更多相关文章
- JWT生成Token做登录校验
一.JWT的优点 1.服务端不需要保存传统会话信息,没有跨域传输问题,减小服务器开销. 2.jwt构成简单,占用很少的字节,便于传输. 3.json格式通用,不同语言之间都可以使用. 二.使用JWT进 ...
- 国服最强JWT生成Token做登录校验讲解,看完保证你学会!
转载于:https://blog.csdn.net/u011277123/article/details/78918390 Free码农 2017-12-28 00:08:02 JWT简介 JWT(j ...
- Linux系统下利用wget命令把整站下载做镜像网站
Linux系统下利用wget命令把整站下载做镜像网站 2011-05-28 18:13:01 | 1次阅读 | 评论:0 条 | itokit 在linux下完整的用wget命令整站采集网站做镜像 ...
- virtualenv 环境下 Nginx + Flask + Gunicorn+ Supervisor 搭建 Python Web
在这篇文章里,我们将搭建一个简单的 Web 应用,在虚拟环境中基于 Flask 框架,用 Gunicorn 做 wsgi 容器,用 Supervisor 管理进程,然后使用 Python 探针来监测应 ...
- 利用自定义的AuthenticationFilter实现Basic认证
[ASP.NET MVC] 利用自定义的AuthenticationFilter实现Basic认证 很多情况下目标Action方法都要求在一个安全上下文中被执行,这里所谓的安全上下文主要指的是当前 ...
- 转:【译】Asp.net MVC 利用自定义RouteHandler来防止图片盗链
[译]Asp.net MVC 利用自定义RouteHandler来防止图片盗链 你曾经注意过在你服务器请求日志中多了很多对图片资源的请求吗?这可能是有人在他们的网站中盗链了你的图片所致,这会占用你 ...
- CSS自定义select下拉选择框(不用其他标签模拟)
今天群里有人问到怎么自定义select下拉选择框的样式,于是群里就展开了激烈的讨论,刚开始一直就是考虑怎样使用纯CSS实现,把浏览器默认的样式覆盖掉,但最后均因兼容问题处理不好而失败告终,最后的解决方 ...
- java利用自定义类型对树形数据类型进行排序
前言 为什么集合在存自定义类型时需要重写equals和hashCode? 1.先说List集合 List集合在存数据时是可以重复的但是 当我们需要判断一个对象是否在集合中存在时这样就有问题了! 因为我 ...
- 20155211 课下测试ch12补做
20155211 课下测试ch12补做 有关线程图,下面说法正确的是() A.图的原点表示没有任何线程完成一条指令的初始状态 B.向右向上是合法的转换 C.向左向下是合法的转换 D.对角线是合法的转换 ...
随机推荐
- 原生 JS 的 Base64 转码
JavaScript 原生提供两个 Base64 相关的方法: btoa():任意值转为 Base64 编码 atob():Base64 编码转为原来的值 注意:这两个方法不适合非 ASCII 码的字 ...
- 手写HASHMAP
手写HASHMAP const int MAXN=10010; const int HASH=10100; //需要hash的数的总个数最大值 struct HASHMAP { ...
- Hibernate学习笔记一之注解
1.@Entiy 实体类注解 2.@Table 映射表 (name=“”)表名 3.@Coulmn @Column( name="columnName"; ...
- SQLException: Io 异常: Connection refused ERR=12514 ERR=1153异常处理过程
solr更新索引连接数据库地址时发生的错误,数据库拒绝连接,经过调查是因为solr的data-config.xml 文件中配置数据库连接的地方,不应该配置数据库实例名而应该是数据库server_nam ...
- 2、基于wsgiref模块DIY一个web框架
一 web框架 Web框架(Web framework)是一种开发框架,用来支持动态网站.网络应用和网络服务的开发.这大多数的web框架提供了一套开发和部署网站的方式,也为web行为提供了一套通用的方 ...
- linux 几个常用的Debian更新源
deb http://ftp.debian.org/debian/ lenny main contrib non-free deb-src http://ftp.debian.org/debian/ ...
- 在centos上安装smplayer播放器
Smplayer是一个非常好用的媒体播放器.可以支持大部分的视频和音频文件.它支持音频轨道切换.允许调节亮度.对比度.色调.饱和度.伽玛值,按照倍速.4倍速等多种速度回放.还可以进行音频和字幕延迟调整 ...
- ubuntu配置默认python版本并安装pip
ubuntu 16.04本身是自带python的,他本身是自带2.X和3.X,两个版本,默认的是2.X.这里记录一下如果在版本间切换以及如何把python版本切换到3.X下的方法. 1.查看Ubunt ...
- 【转】使用URL SCHEME启动天猫客户端并跳转到某个商品页面的方法
在项目中遇到了这样一个需求:让用户在手机应用中,点击一个天猫的商品链接(知道商品在PC浏览器里的地址),直接启动天猫的客户端并显示这个商品.以前曾经实现过类似的功能,不过那次是淘宝的商品,天猫和淘宝的 ...
- 1347: Last Digit (周期函数)
1347: Last Digit Submit Page Summary Time Limit: 1 Sec Memory Limit: 128 Mb Submitted: ...