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,上下文管理相关推荐

  1. python意外退出_有趣的Python上下文管理器

    阅读耗时:9分钟 目录 编写自定义上下文管理器 从生成器到上下文管理器 将上下文管理器编写为装饰器 嵌套式上下文管理器 组合式上下文管理器 利用用上下文管理器创建SQLAlchemy session ...

  2. Flask 上下文管理-- (session,request,current_app的传递)--类似本地线程实现,以及多app应用...

    Flask session,request,current_app的传递 请求上下文的作用 -- 封装请求相关得数据(request,session) 请求上下文requestsessionreque ...

  3. Python 21 Flask(二)上下文管理详解

    上下文管理 对于上下文管理我没有找到明确的定义,但是经过源码流程的学习后,我觉得所谓的上下文管理应该就是Flask对请求和应用相关数据的一种处理方式,它不是像Django一样通过参数的传导,而是创建了 ...

  4. Flask的上下文管理机制

    前引 在了解flask上下文管理机制之前,先来一波必知必会的知识点. 面向对象双下方法 首先,先来聊一聊面向对象中的一些特殊的双下划线方法,比如__call__.__getattr__系列.__get ...

  5. flask 上下文管理

    前引 在了解flask上下文管理机制之前,先来一波必知必会的知识点. 面向对象双下方法 首先,先来聊一聊面向对象中的一些特殊的双下划线方法,比如__call__.__getattr__系列.__get ...

  6. flask上下文管理机制

    flask中的上下文分为请求上写文和应用上下文,接下来,从以下三个大的方面分别探讨flask的两大上下文管理机制. 方面一:请求进来时 方面二:视图函数 方面三:请求结束前 先来一个最简单的flask ...

  7. Flask入门(一)之消息闪现、请求扩展、中间件、蓝图、上下文管理

    上一篇文章>Flask安装及入门操作 一.消息闪现(flash) 1.使用 #!/usr/bin/env python # coding:utf-8 from flask import Flas ...

  8. python上下文是什么_(1条消息)python使用@contextmanager来定义上下文管理器(一篇文章,彻底明白!码文并茂,简单明了)...

    什么是上下文管理器? 上下文管理器是在Python2.5之后加入的功能,可以在方便的需要的时候比较精确地分配和释放资源, with便是上下文管理器的最广泛的应用 with open("tes ...

  9. python使用@contextmanager来定义上下文管理器(一篇文章,彻底明白!码文并茂,简单明了)和 yield 和 __enter__ 和 __exit__

    什么是上下文管理器? 上下文管理器是在Python2.5之后加入的功能,可以在方便的需要的时候比较精确地分配和释放资源, with便是上下文管理器的最广泛的应用 with open("tes ...

最新文章

  1. seaborn系列 (7) | 核函数密度估计图kdeplot()
  2. iOS之UI--涂鸦画板实例
  3. Safari回传值给应用程序
  4. 微软软件推送服务器,向 UWP 应用添加推送通知 - Azure Mobile Apps | Microsoft Docs
  5. Python os.path路径模块中的操作方法总结
  6. Winform中设置ZedGraph的曲线符号Symbol以及对应关系
  7. Python有哪些是必须学的运算符?
  8. java播放背景音乐的几种方式
  9. MySQL数据库事务中的行级锁,表级锁,页级锁
  10. mysql c api 函数 linux下 mysql_query_Linux C 调用MYSQL API 函数mysql_escape_string()转义插入数据...
  11. 无处不在的xss攻击
  12. [Ext JS6] Grid 某些行不允许删除和选择的实现
  13. JAVA正则表达式4种常用功能 [转]
  14. ba无标度网络python_无标度网络-幂律分布
  15. xp计算机如何共享打印机,在XP系统下怎么设置俩台电脑或多台电脑共享一个打印机?...
  16. html制作古诗念奴娇,《念奴娇·赤壁怀古》_苏轼的诗词_诗词名句网
  17. window cmd 命令大全 (order)
  18. 实现语音视频录制(demo源码)
  19. go mod invalid pseudo-version
  20. win2012 r2/win2016修改域密码复杂度策略

热门文章

  1. Android样式开发--selector
  2. Spring Boot 1:Introduction
  3. Redis实现之整数集合
  4. 合并两个排序的链表递归和非递归C++实现
  5. [NOIP2014]飞扬的小鸟
  6. MySQL 5.6 my.cnf 参数说明(转)
  7. angularjs 服务
  8. Teradata Expression 12 在Windows 2003上Connection Reset 问题的解决方法
  9. matlab imresize对图像进行缩小放大
  10. 很全的sas基础知识