码迷,mamicode.com
首页 > 其他好文 > 详细

flask-上下文3-梳理

时间:2021-06-06 19:30:20      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:att   方式   生成   setattr   one   nio   mic   wsgi   sel   

 

 

# 将请求相关的数据environ封装到Request Context对象中
# 再将对象封装到local中(每个线程或协程独立空间存储)
# ctx.app --当前app到名称,即Flask对象
# ctx.request --Request对象(封装请求相关的东西)
# ctx.session --空

ctx = self.request_context(environ) # return RequestContext(self, environ) # 将ctx通过LocalStack添加到Local中
‘‘‘
  {
    唯一标识:{
      ‘stack‘:[ctx,]
    }
  }
‘‘‘
ctx.push()
# push操作后session有值了,不再是空
# 将ctx压入local栈中。
(因为LocalStack对象在程序刚启动时即生成,所以是压入一个已存在的local对象中。)

# self即ctx对象
def push(self):
  _request_ctx_stack.push(self)
# 设置session值
  self.session = self.app.open_session(self.request)   if self.session is None: self.session = self.app.make_null_session()

 

 

技术图片

 

 

class RequestContext(object):
"""The request context contains all request relevant information. It is
created at the beginning of the request and pushed to the
`_request_ctx_stack` and removed at the end of it. It will create the
URL adapter and request object for the WSGI environment provided."""

def __init__(self, app, environ, request=None):
self.app = app
if request is None:
request = app.request_class(environ)
self.request = request
self.url_adapter = app.create_url_adapter(self.request)
self.flashes = None
self.session = None


class LocalProxy:

__slots__ = ("__local", "__name", "__wrapped__")

def __init__(
self,
local: t.Union["Local", t.Callable[[], t.Any]],
name: t.Optional[str] = None,
) -> None:
      # local是传入的偏函数
      # 以下语句等同于self.__local = local,私有属性的访问方式‘_类名__属性’
object.__setattr__(self, "_LocalProxy__local", local)
object.__setattr__(self, "_LocalProxy__name", name)



flask-上下文3-梳理

标签:att   方式   生成   setattr   one   nio   mic   wsgi   sel   

原文地址:https://www.cnblogs.com/karlie1661/p/14855166.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!