• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

Karlie24

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

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)



posted on 2021-06-06 13:42  Karlie24  阅读(43)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3