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对象的时候创建的时候是空的,需要给他赋值,等到视图结束就销毁了

posted @ 2018-08-09 20:09  R00M  阅读(94)  评论(0编辑  收藏  举报