flask 高级
一:请求上下文管理
1. 主要管理 request 和 session
2. 流程
(1) 请求进来调用__call__ 方法,__call__ 调用wsgi_app方法
(2)将请求数据和空session封装成requestcontext对象,简称ctx
(3)将ctx传给localstatck 对象,localstack 对象将ctx 传给 local对象,local是一个字典
(4) local字典 __storage__={111:{stack:[ctx,]}}
(5) 根据请求中的cookie获取到session对应的值,将值进行解密和反序列化,写到ctx中的session中
视图
(6)将ctx session对应的值写到浏览器的cookie中
(7)删除 ctx
(8)将请求结果返回给用户浏览器
(9)断开 socket连接
二:app上下文管理和LocalProxy
1. __Str__ 打印对象的属性信息
2. LocalProxy 作用: 在视图中,通过LocalProxy去localstack对象中获取ctx对象的session和request值
(1)视图 - localproxy - 偏函数 - localstack - local
3. APP上下文管理
- 请求到来
对数据进行封装:
ctx = RequestContext(request,session)
app_ctx = AppContext(app,g)
保存数据:
将包含了(app,g)数据的app_ctx对象,利用 _app_ctx_stack(贝贝,LocalStack())将app_ctx添加到Local中
storage = {
1231:{stack:[app_ctx(app,g),]}
}
将包含了request,session数据的ctx对象,利用_request_ctx_stack(刘淞,LocalStack()),将ctx添加到Local中
storage = {
1231:{stack:[ctx(request,session),]}
将请求中的cookie对应session值,解压反序列化放到ctx session 中
- 视图函数处理:
from flask import Flask,request,session,current_app,g
app = Flask(__name__)
@app.route('/index')
def index():
# 去请求上下文中获取值 _request_ctx_stack
request.method
session['xxx']
# 去app上下文中获取值:_app_ctx_stack
print(current_app)
print(g)
return "Index"
if __name__ == '__main__':
app.run()
app.wsgi_app
4. app 和 g
g 作用:可在before_request对应函数中定义变量,在视图函数中获取
特点:只支持在一个请求中赋值,在这个请求中获取值
app作用:app 中自定义配置文件

浙公网安备 33010602011771号