作家
登录

Flask中的请求上下文和应用上下文

作者: 来源: 2017-05-11 16:04:38 阅读 我要评论

  •  
  •         # Like request context, app contexts can be pushed multiple times 
  •  
  •         # but there a basic "refcount" is enough to track them. 
  •  
  •         self._refcnt = 0 
  •  
  •   
  •  
  •     def push(self): 
  •  
  •         """Binds the app context to the current context.""" 
  •  
  •         self._refcnt += 1 
  •  
  •         _app_ctx_stack.push(self) 
  •  
  •   
  •  
  •     def pop(self, exc=None): 
  •  
  •         """Pops the app context.""" 
  •  
  •         self._refcnt -= 1 
  •  
  •         if self._refcnt <= 0: 
  •  
  •             if exc is None: 
  •  
  •                 exc = sys.exc_info()[1] 
  •  
  •             self.app.do_teardown_appcontext(exc) 
  •  
  •         rv = _app_ctx_stack.pop() 
  •  
  •         assert rv is self, 'Popped wrong app context.  (%r instead of %r)' \ 
  •  
  •             % (rv, self) 
  •  
  •   
  •  
  •     def __enter__(self):  
  • 由以上代码可以看出:“应用高低文”也是一个高低文对象,可以应用with语句结垢荷琐高低文情况,它也实现了push、pop等办法。“应用高低文”的构造函数也和“请求高低文”类似,都有app、url_adapter等属性。“应用高低文”存在的一个重要功能就是肯定请求地点的应用。

    然而,以上的阐述却竽暌怪让人产生如许的疑问:既然“请求高低文”中也包含app等和当前应用相干的信息,那么只要调用_request_ctx_stack.top.app或者魔法current_app就可以肯定请求地点的应用了,那为什么还须要“应用高低文”对象呢?对于荡竽暌功用单请求来说,应用“请求高低文”确切就可以了。然而,Flask的设计理念之一就是多应用的支撑。当在一个应用的请求高低文情况中,须要嵌套处理另一个应用的相干操作时,“请求高低文”显然就不克不及很好地解决问题了。若何让请求找到“精确”的应用呢?我们可能会想到,可以再增长一个请求高低文情况,并将其推入_request_ctx_stack栈中。因为两个高低文情况的运行是自力的,不会互相干扰,所以经由过程调用_request_ctx_stack.top.app或者魔法current_app也可以获合适前高低文情况正在处理哪个应用。这种办法在必定程度上可行,然则如不雅对于第二个应用的处理不涉及到相干请求,那也就无大年夜谈起“请求高低文”。


      推荐阅读

      2025年全球数据将攀升至163ZB,10倍的数据增长来源于哪?

    【51CTO.com原创稿件】比来,希捷科技与IDC合营宣布了一份名为《数据时代2025》的数据成长趋势申报,这份白皮>>>详细阅读


    本文标题:Flask中的请求上下文和应用上下文

    地址:http://www.17bianji.com/lsqh/35165.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)