
在Flask中处理请求时,应用会生成一个“请求高低文”对象。全部请求的处理过程,都邑在这个高低文对象中进行。这包管了请求的处理过程不被干扰。处理请求的具体代码如下:
- def wsgi_app(self, environ, start_response):
- with self.request_context(environ):
- # with语句中生成一个`response`对象
- ...
- return response(environ, start_response)
在Flask 0.9版本之前,应用只有“请求高低文”对象,它包含了和请求处理相干的信息。同时Flask还根据werkzeug.local模块中实现的一种数据构造LocalStack用来存储“请求高低文”对象。这在《一个Flask应用运行过程分析 》中有所介绍。在0.9版本中,Flask又惹人了“应用高低文”的概念。本文重要Flask中的┞封两个“高低文”对象。
LocalStack
在介绍“请求高低文”和“应用高低文”之前,我们对LocalStack扼要做一个回想。在Werkzeug库——local模块一文中,我们讲解了werkzeug.local模块中实现的三个类Local、LocalStack和LocalProxy。关于它们的概念和具体介绍,可以查看膳绫擎的文┞仿。这里,我们用一个例子来解释Flask中应用的一种数据构造LocalStack。
- >>> from werkzeug.local import LocalStack
- >>> import threading
- # 创建一个`LocalStack`对象
- >>> local_stack = LocalStack()
- # 查看local_stack中存储的信息
- >>> local_stack._local.__storage__
- {}
- # 定义一个函数,这个函数可以向`LocalStack`中添加数据
- >>> def worker(i):
- local_stack.push(i)
- # 应用3个线程运行函数`worker`
- >>> for i in range(3):
- t = threading.Thread(target=worker, args=(i,))
- t.start()
- # 再次查看local_stack中存储的信息
- >>> local_stack._local.__storage__
- {<greenlet.greenlet at 0x4bee5a0>: {'stack': [2]},
- <greenlet.greenlet at 0x4bee638>: {'stack': [1]},
- <greenlet.greenlet at 0x4bee6d0>: {
推荐阅读
2025年全球数据将攀升至163ZB,10倍的数据增长来源于哪?
【51CTO.com原创稿件】比来,希捷科技与IDC合营宣布了一份名为《数据时代2025》的数据成长趋势申报,这份白皮>>>详细阅读
本文标题:Flask中的请求上下文和应用上下文
地址:http://www.17bianji.com/lsqh/35165.html
1/2 1

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