flask-上下文3-梳理

Posted Karlie24

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了flask-上下文3-梳理相关的知识,希望对你有一定的参考价值。

 

 

# 将请求相关的数据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-梳理的主要内容,如果未能解决你的问题,请参考以下文章

(搬运以学习)flask 上下文的实现

js基础梳理-究竟什么是变量对象,什么是活动对象?

flask route 设计思路

网络从套接字到Web服务器

新经资讯项目业务逻辑梳理

flask框架3