pipreq --》 requirement.txt
flask 闪现
before_requrst 多个 从上往下 process_request
after_request 多个 从下往上 process_response
before_first_request 项目启动访问的第一次
teardown_request 不管是否发生异常都会执行它下面的函数 after_request 不会执行 用作记录日志
errrorhandler 捕获错误并处理 提示或者返回其他页面 绑定错误的状态码
全局的标签和全局过滤器
flask 中间件 wsgi_app 和django的中间件完全不一样 flask 中间件就是猴子补丁的应用
app.run() -> app.__call__() --> self.wsgi_app()
自定义就是继承原来的的wsgi 调用的还是以前的,只不过在他上面或者下面写点东西
猴子补丁:只是一个概念,不属于任何包和模块
利用的 python 一切皆对象的理念 在程序运行过程中,动态修改方法
猴子补丁的用途:import u_json as json 会很多 就是修改项目里全部 from gevent import monkey
flask 蓝图 blueprint
没有蓝图之前都是单文件
有了蓝图之后都是 路由分发
from flask import Blueprint
order=Blueprint() 蓝图对象 蓝图对象注册路由
__init__.py 注册 注册蓝图对象 app.register_blueprint(蓝图对象) 先注册后使用
app 中 可以使用 before_request 等 请求扩展可以用,只是在当前管理下可以用
蓝图相当于dajngo 中的 app 分文件
app = Flask(__name__, template_folder='template', statics_floder='statics', )
模板文件 静态文件
app.register_blueprint(obj, url_prefix='/admin') 路由分发 路由前缀
伪静态 就是路由中加入 xxx.html
cbv 对象调 是方法 类来调是函数 function
uwsgi 开的多线程 和python 无关 也就和 GIL无关
管道 共享变量 queue 锁 线程之间共享资源
线程id号 {id号:{值}} 所以线程安全 threading.local 全局request不会乱
object __setattr__ local 内部保证数据不乱 只支持线程 不支持携程
携程 去去id号就是线程的
获取协程id号 线程的id号
request localstack local setattr getattr
try except storage[id号][v]=[k] setattr
getattr 根据id号去获取值
flask 请求生命周期
app.__call__() self.wsgi_app() ctx对象