知识点
- 配置文件
- 路由系统
- 视图
- 模板渲染
- session
当请求刚到来:flask读取请求cookie中session对应的值,将改值解密并反序列化成字典,放入内存以便视图函数使用
视图函数:
请求结束时, flask会读取内存中字典的值,进行序列化并加密,写入到cookie中@app.route('/ses') def ses(): session['xxx'] = 1 session['yyy'] = 2 del session['yyy'] return 'Session'
- flash(session衍生出来的, 一次性存取)
from flask import Flask, flash, get_flashed_messages app = Flask(__name__) app.config['SECRET_KEY'] = 'chilson' @app.route('/page1') def page1(): flash('临时存储数据。。。') return '数据已存' @app.route('/page2') def page2(): mssages = get_flashed_messages() return messages[0] if len(messages) else 'flash end'
- 请求和响应
- 特殊装饰器
- 蓝图
- 中间件
session执行流程
上下文管理(线程数据隔离)
请求到来的时候:
去全局字典找到对应的线程,获取ctx对象,分别将 ctx.request/ctx.session
赋值给 flask.request
和 flask.session
。
请求结束的时候:
根据当前线程的唯一标识,去全局字典移除对应的数据。
request:
a: wsgi_app(environ, start_response)
b:
ctx = RequestContext(session, request)
ctx.push()
c: LocalStack
, 把ctx对象添加到Local中
d: Local
__storage__ = {
1212: {'stack': [ctx, ]}
}
session:
a: wsgi_app(environ, start_response)
b:
ctx = RequestContext(session, request)
ctx.push()
c: LocalStack
, 把ctx对象添加到Local中
d: Local
__storage__ = {
1212: {'stack': [ctx, ]}
}
e: 通过LocalStack
获取ctx中的session, 给session赋值(从cookie中读取数据) => open_session()