ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

flask-上下文3-梳理

2021-06-06 14:05:17  阅读:114  来源: 互联网

标签:__ flask ctx self request session 上下文 local 梳理


 

 

# 将请求相关的数据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,ctx,self,request,session,上下文,local,梳理
来源: https://www.cnblogs.com/karlie1661/p/14855166.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有