膳绫擎的结不雅显示:_request_ctx_stack中为每一个线程创建了一个“键-值”对,每一“键-值”对中包含一个请求高低文对象。如不雅应用with语句,在分开高低文情况时栈中烧毁存储的高低文对象信息。
请求高低文——0.9版本
在0.9版本中,Flask惹人了“应用高低文”的概念,这对“请求高低文”的实现有必定的改变。这个版本的“请求高低文”也是一个高低文对象。在应用with语句进入高低文情况后,_request_ctx_stack会存储这个高低文对象。不过与0.1版本相比,有以下几点改变:
- 请求高低文实现了push、pop办法,这使得对于请求高低文的操作加倍的灵活;
- 伴跟着请求高低文对象的生成并存储在栈构造中,Flask还会生成一个“应用高低文”对象,并且“应用高低文”对象也会存储在另一个栈构造中去。这是两个版本最大年夜的不合。
为了应对这个问题,Flask中将应用相干的信息零丁拿出来,形成一个“应用高低文”对象。这个对象可以和“请求高低文”一路应用,也可以零丁拿出来应用。不过有一点须要留意的是:在创建“请求高低文”时必定要创建一个“应用高低文”对象。有了“应用高低文”对象,便可以很轻易地肯定当前处理哪个应用,这就是魔法current_app。在0.1版本中,current_app是对_request_ctx_stack.top.app的引用,而在0.9版本中current_app是对_app_ctx_stack.top.app的引用。
- # Flask v0.9
- def push(self):
- """Binds the request context to the current context."""
- top = _request_ctx_stack.top
- if top is not None and top.preserved:
- top.pop()
- # Before we push the request context we have to ensure that there
- # is an application context.
- app_ctx = _app_ctx_stack.top
- if app_ctx is None or app_ctx.app != self.app:
- app_ctx = self.app.app_context()
- app_ctx.push()
- self._implicit_app_ctx_stack.append(app_ctx)
- else:
- self._implicit_app_ctx_stack.append(None)
推荐阅读
2025年全球数据将攀升至163ZB,10倍的数据增长来源于哪?
【51CTO.com原创稿件】比来,希捷科技与IDC合营宣布了一份名为《数据时代2025》的数据成长趋势申报,这份白皮>>>详细阅读
本文标题:Flask中的请求上下文和应用上下文
地址:http://www.17bianji.com/lsqh/35165.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示