Flask上下文管理
2018-05-06 18:38:38 0 举报
Flask上下文管理,
作者其他创作
大纲/内容
{ 123: { stack:[ ctx ] } 456: { stack:[ ctx ] }}
session_interface = SecureCookieSessionInterface()
def __init__(self): self._local = Local()
globals.py
取数据-删除
将拿到的的request对象返回给_get_current_object()
保存session
Flask(视图部分)
和args方法同理
self._local = Local()
Flask上下文管理源码浅析
LocalStack()(local.py)
def finalize_request(……):response = self.process_response(response)
app.__call__
_app_ctx_stack = LocalStack()
def full_dispatch_request(self): …… return self.finalize_request(rv)
封装成Request最终返回给ctx
return RequestContext()
request=app.request_class()
ctx=self.request_context()
@ZhuGaochao
wsgi_app()
LocalProxy()
request.method# 等价于LocalProxy.__getattr__('key'=method)
先去ctx中取到request再去request中获取args
def wsgi_app(……): …… response = self.full_dispatch_request()
def pop(……): finally: rv = _app_ctx_stack.pop()
_request_ctx_stack = LocalStack() def __init__(self): self._local = Local()
请求进来
初始化
_request_ctx_stack = LocalStack()
_request_ctx_stack.push()
def _get_current_object(self): …… return self.__local() # 函数加括号
地第三阶段:请求处理完毕
地第一阶段: 将ctx放入Local对象里
self.session = self.app.open_session(self.request)
地第二阶段: 视图函数部分
def _lookup_app_object(name): top = _app_ctx_stack.top
AppContext()
函数加括号相当于执行箭头指的函数
导入request
执行
request_class = Request
def push():......
def __init__(self):
global.py
RequestContext()
request实质(到底是啥)
if rv is None: self._local.stack = rv = [] # 放一个空列表 rv.append(obj) return rv
全局变量_request_ctx_stack里面又包一个对象Local()
流程和request同理
if request is None:
wsgi
def __init__():......
class LocalStack(object):
调用__call__
def wsgi_app(……): finally: ctx.auto_pop(error)
调用push()把ctx打包封装处理
Flask
获取返回值
ctx=push()
request.args# 等价于LocalProxy.__getattr__('key'=args)
............
调用request_context()返回 RequestContext()
进入__call__执行wsgi_app()
request
0 条评论
下一页