Flask
Flask基础
配置文件
- 将路径的字符串用rsplit分割,
- 使用importlib模块导入
- app.config.from_object("settings.DevelopmentConfig")写一个配置类导入
路由系统
使用endpoint字段进行配置,用于反向生成url
如果没有写endpoint则使用函数名
url=url_for('')
当然动态路由也可以进行反向生成
闪现
基于session存储数据,读取时pop一下.只能够取一次
蓝图
目标:给开发者提供目录结构
也可以给某个蓝图增加前缀
也能在总蓝图里加上before_request 所有的请求都会先走这个函数
你用到了哪些Flask组件
- wtforms
- DBUtils
- SQLAIchemy
- redis
- flask-script
- flask-migrate
上下文管理
flask上下文管理的理解
答:与Django不同的是,Django用的是将请求传参的形式进行对请求的操作,那么flask是用请求上下文.
Flask的上下文管理分为两种,一种是请求的上下文管理,另外一种是应用上下文管理.
- 请求到来:
- 将请求和session相关封装到ctx=RequestContext对象中
- 将app和g封装到app_ctx=AppContext对象中.
- 再通过LocalStack对象将ctx append_ctx封装到Local对象中
- 获取数据:
-
- 通过LocalProxy对象+偏函数,调用LocalStack去Local中获取
-
- 获取响应ctx/app_ctx中封装的值
- 请求结束
- 调用LocalStack的pop方法,将ctx和app_ctx移除
Local是什么?作用?
Local里边封装了_storage_的字典,{唯一标识:{'stack':[ctx,]}}
根据每一个协程/或者线程开辟空间源码里(用try来进行判断),保证数据的隔离
LocalStack是什么?作用?
所有对Local数据的操作都需要在该类里面进行,
首先功能比较明确,Local用来存储值,而LocalStack用于操作Local的值
并将Local的列表维护成一个栈
为什么要把 ctx=Request/session app_ctx=app/g
因为离线脚本不需要用到请求和session
g和session一样吗
不一样,
session在创建的时候会去cookis中取值,在销毁的时候就会将数据写入cookie中
g在实例化APPContext对象的时候创建的时候是空的,需要给他赋值,等到视图结束就销毁了