flask总结之session,websocket,上下文管理
1.关于session
flask是带有session的,它加密后存储在用户浏览器的cookie中,可以通过app.seesion_interface源码查看
from flask import Flask,session
app = Flask(__name__)
app.secret_key = 'aptx4869' # 必须要指定这个参数
@app.route('/login')
def login():
#...
# 设置session
session['user_info'] = 'name'
return '123'
if __name__ == '__main__':
app.run(debug=True)
View Code
登录后,通过F12查看网络请求信息,可以看到一个Set-Cookie,这个cookie的key就是session,值为一堆加密字符串
由于服务端是单进程,单线程。所有请求过来时会排队。这个字典会放一个key,这个key就是程序的线程id,value存放用户信息
2.关于websocket
它是一个协议,常与http对比,两者都是应用层协议。websocket主要解决了服务端向客户端推送消息(全双工)
http协议规定:一次请求一次响应,属于无状态短链接。http协议只能被动接受客户端给服务端发送的消息
之前该介绍链接:猛戳此处
websocket协议规定:
--握手:base64(sha1(key magic key))
--收发数据(加密)
-127
-126
<=125
(经过以上三种字节大小判断对数据进行解密)
--持久连接
在三大框架中的使用:
flask中使用了werkzurg,它支持websocket(在新版本中),但是效果不是太好,我们可以使用geventwebsocket模块实现,它既支持http也支持websocket
django中默认socket使用的是wsgiref写的,它也不支持websocket,只支持http协议,但是我们可以使用channel组件实现
tornado中默认使用的是自己的socket,它既支持http协议也支持websocket协议
相关博客链接
3.上下文管理
flask常见第三方组件
# Flask组件
flask-session session放在redis
flask-SQLAlchemy 如django里的ORM操作
flask-migrate 数据库迁移
flask-script 自定义命令
blinker 信号-触发信号
# 第三方组件
Wtforms 快速创建前端标签、文本校验
dbutile 创建数据库连接池
gevnet-websocket 实现websocket
# 自定义Flask组件
自定义auth认证
参考flask-login组件
flask上下文管理流程:
# a、简单来说,falsk上下文管理可以分为三个阶段:
1、'请求进来时':将请求相关的数据放入上下文管理中
2、'在视图函数中':要去上下文管理中取值
3、'请求响应时':要将上下文管理中的数据清除
# b、详细点来说:
1、'请求刚进来':
将request,session封装在RequestContext类中
app,g封装在AppContext类中
并通过LocalStack将requestcontext和appcontext放入Local类中
2、'视图函数中':
通过localproxy--->偏函数--->localstack--->local取值
3、'请求响应时':
先执行save.session()再各自执行pop(),将local中的数据清除
主要涉及到类:
RequestContext #封装进来的请求(赋值给ctx)
AppContext #封装app_ctx
LocalStack #将local对象中的数据维护成一个栈(先进后出)
Local #保存请求上下文对象和app上下文对象
Flask把Local对象中的的值stack 维护成一个列表原因:
# 因为通过维护成列表,可以实现一个栈的数据结构,进栈出栈时只取一个数据,巧妙的简化了问题。
# 还有,在多app应用时,可以实现数据隔离,列表里不会加数据,而是会生成一个新的列表
# local是一个字典,字典里key(stack)是唯一标识,value是一个列表
相关博客链接
更多专业前端知识,请上 【猿2048】www.mk2048.com
flask总结之session,websocket,上下文管理相关推荐
- python意外退出_有趣的Python上下文管理器
阅读耗时:9分钟 目录 编写自定义上下文管理器 从生成器到上下文管理器 将上下文管理器编写为装饰器 嵌套式上下文管理器 组合式上下文管理器 利用用上下文管理器创建SQLAlchemy session ...
- Flask 上下文管理-- (session,request,current_app的传递)--类似本地线程实现,以及多app应用...
Flask session,request,current_app的传递 请求上下文的作用 -- 封装请求相关得数据(request,session) 请求上下文requestsessionreque ...
- Python 21 Flask(二)上下文管理详解
上下文管理 对于上下文管理我没有找到明确的定义,但是经过源码流程的学习后,我觉得所谓的上下文管理应该就是Flask对请求和应用相关数据的一种处理方式,它不是像Django一样通过参数的传导,而是创建了 ...
- Flask的上下文管理机制
前引 在了解flask上下文管理机制之前,先来一波必知必会的知识点. 面向对象双下方法 首先,先来聊一聊面向对象中的一些特殊的双下划线方法,比如__call__.__getattr__系列.__get ...
- flask 上下文管理
前引 在了解flask上下文管理机制之前,先来一波必知必会的知识点. 面向对象双下方法 首先,先来聊一聊面向对象中的一些特殊的双下划线方法,比如__call__.__getattr__系列.__get ...
- flask上下文管理机制
flask中的上下文分为请求上写文和应用上下文,接下来,从以下三个大的方面分别探讨flask的两大上下文管理机制. 方面一:请求进来时 方面二:视图函数 方面三:请求结束前 先来一个最简单的flask ...
- Flask入门(一)之消息闪现、请求扩展、中间件、蓝图、上下文管理
上一篇文章>Flask安装及入门操作 一.消息闪现(flash) 1.使用 #!/usr/bin/env python # coding:utf-8 from flask import Flas ...
- python上下文是什么_(1条消息)python使用@contextmanager来定义上下文管理器(一篇文章,彻底明白!码文并茂,简单明了)...
什么是上下文管理器? 上下文管理器是在Python2.5之后加入的功能,可以在方便的需要的时候比较精确地分配和释放资源, with便是上下文管理器的最广泛的应用 with open("tes ...
- python使用@contextmanager来定义上下文管理器(一篇文章,彻底明白!码文并茂,简单明了)和 yield 和 __enter__ 和 __exit__
什么是上下文管理器? 上下文管理器是在Python2.5之后加入的功能,可以在方便的需要的时候比较精确地分配和释放资源, with便是上下文管理器的最广泛的应用 with open("tes ...
最新文章
- seaborn系列 (7) | 核函数密度估计图kdeplot()
- iOS之UI--涂鸦画板实例
- Safari回传值给应用程序
- 微软软件推送服务器,向 UWP 应用添加推送通知 - Azure Mobile Apps | Microsoft Docs
- Python os.path路径模块中的操作方法总结
- Winform中设置ZedGraph的曲线符号Symbol以及对应关系
- Python有哪些是必须学的运算符?
- java播放背景音乐的几种方式
- MySQL数据库事务中的行级锁,表级锁,页级锁
- mysql c api 函数 linux下 mysql_query_Linux C 调用MYSQL API 函数mysql_escape_string()转义插入数据...
- 无处不在的xss攻击
- [Ext JS6] Grid 某些行不允许删除和选择的实现
- JAVA正则表达式4种常用功能 [转]
- ba无标度网络python_无标度网络-幂律分布
- xp计算机如何共享打印机,在XP系统下怎么设置俩台电脑或多台电脑共享一个打印机?...
- html制作古诗念奴娇,《念奴娇·赤壁怀古》_苏轼的诗词_诗词名句网
- window cmd 命令大全 (order)
- 实现语音视频录制(demo源码)
- go mod invalid pseudo-version
- win2012 r2/win2016修改域密码复杂度策略