flask上下文

Flask提供了两种上下文,一种是应用上下文(Application Context),一种是请求上下文(Request Context)。

application 指的就是当你调用app = Flask(name)创建的这个对象app;
request 指的是每次http请求发生时,WSGI server(比如gunicorn)调Flask.call()之后,在Flask对象内部创建的Request对象;
application 表示用于响应WSGI请求的应用本身,request 表示每次http请求;
application的生命周期大于request,一个application存活期间,可能发生多次http请求,所以,也就会有多个request

5

1

application 指的就是当你调用app = Flask(name)创建的这个对象app;

2

request 指的是每次http请求发生时,WSGI server(比如gunicorn)调Flask.call()之后,在Flask对象内部创建的Request对象;

3

application 表示用于响应WSGI请求的应用本身,request 表示每次http请求;

4

application的生命周期大于request,一个application存活期间,可能发生多次http请求,所以,也就会有多个request

5


Flask中有四种请求hook,分别是@before_first_request @before_request @after_request @teardown_request

Flask是一个基于WerkZeug实现的框架,因此Flask的App Context和Request Context是基于WerkZeug的Local Stack的实现。

这两种上下文对象类定义在flask.ctx中,ctx.push会将当前的上下文对象压栈压入flask._request_ctx_stack中,

这个_request_ctx_stack同样也是个Thread Local对象,也就是在每个线程中都不一样,上下文压入栈后,再次请求的时候都是通过_request_ctx_stack.top在栈的顶端取

,所取到的永远是属于自己线程的对象,这样不同线程之间的上下文就做到了隔离。请求结束后,线程退出,ThreadLocal本地变量也随即销毁

,然后调用ctx.pop()弹出上下文对象并回收内存。

来自为知笔记(Wiz)

原文地址:https://www.cnblogs.com/zcfx/p/8605940.html

时间: 2024-10-30 23:58:14

flask上下文的相关文章

Flask上下文管理、session原理和全局g对象

一.一些python的知识 1.偏函数 def add(x, y, z): print(x + y + z) # 原本的写法:x,y,z可以传任意数字 add(1,2,3) # 如果我要实现一个功能,这三个数中,其中一个数必须是3 # 我们就可以使用偏函数来帮着我们传参 from functools import partial # partial:给add这个函数固定传一个数字 3 new_add = partial(add, 3) # 因此新的函数只需要传2个参数 new_add(1,1)

在使用Flask的APScheduler时,如何优雅的导入flask上下文

配置任务JOBS class JobConfig: JOBS = [ { 'id': 'example', 'func': 'job_func', 'args': (), 'trigger': 'interval', 'seconds': 10 } ] 上述代码中几个参数: id:自定义ID func:即你要定时执行的函数,书写规则是 '目录 : 函数名',从config文件所在的目录算起 args:要传入的参数 trigger:任务类型,或者理解为定时器开启的方式,有三种:date表示具体的一

Flask 上下文管理-- (session,request,current_app的传递)

Flask session,request,current_app的传递 1 flask的 request, session 和 current_app 都是 设置方式比较新颖 -- 通过上下文管理的方式实现的 每次请求进来app.run调用 call 方法, 创建 一个本地线程(唯一标识作为键) -- 然后把实例化的对象push到一个地方,在请求结束后返回的时候 pop 掉 local = { '标识':{'stack':[RequestContext(),]} } 2 补充 partial

flask上下文管理

flask的上下文管理分应用上下文和请求上下文: 官方文档里是说先理解应用上下文比较好,不过我还是觉得反过来,从请求上下文开始记录比较合适,所以这篇先记录请求上下文. 那么问题来了,什么才是请求上下文: 通俗点说,其实上下文就像一个容器,包含了很多你需要的信息 request和session都属于请求上下文 request 针对的是http请求作为对象 session针对的是更多是用户信息作为对象 上下文的结构 说到上下文这个概念的数据结构,这里需要先知道,他是运用了一个Stack的栈结构,也就

Flask上下文源码分析(一)

flask中的上下文分两种,application context和request context,即应用上下文和请求上下文. 从名字上看,可能会有误解,认为应用上下文是一个应用的全局变量,所有请求都可以访问修改其中的内容:而请求上下文则是请求内可访问的内容. 但事实上,这两者并不是全局与局部的关系,它们都处于一个请求的局部中. 先说结论:每个请求的g都是独立的,并且在整个请求内都是可访问修改的. 下面来研究一下. 上下文类的定义: 上下文类定义在flask.ctx模块中 class AppCo

10.Flask上下文

1.1.local线程隔离对象 不用local对象的情况 from threading import Thread request = '123' class MyThread(Thread): def run(self): global request request = 'abc' print('子线程',request) #子线程 abc mythread = MyThread() mythread.start() mythread.join() print('主线程',request)

(搬运以学习)flask 上下文的实现

引言 本文主要梳理了flask的current_app, request, session, g的实现原理 源码说明 本文使用flask 0.5 版本 application context 和request context flask有两个context: application context和request context 这里需要通俗地解释一下application context与request context: application 指的就是当你调用app = Flask(__na

深度剖析Flask上下文管理机制

前言 上下文这个概念多见于文章中,是一句话中的语境,也就是语言环境.一句莫名其妙的话出现会让人不理解什么意思,如果有语言环境的说明,则会更好,这就是语境对语意的影响. 上下文是一种属性的有序序列,为驻留在环境内的对象定义环境.在对象的激活过程中创建上下文,对象被配置为要求某些自动服务,如同步.事务.实时激活.安全性等等. 如在计算机中,相对于进程而言,上下文就是进程执行时的环境.具体来说就是各个变量和数据,包括所有的寄存器变量.进程打开的文件.内存信息等.可以理解上下文是环境的一个快照,是一个用

利用flask上下文管理原理,实现线程之间的数据安全

由于一般的程序基本上都是IO密集型,如果只是为了保证数据的安全而去开启进程,这必定是浪费资源的行为:为了保证数据的安全,借用flask的上下文的原理,如下代码实现 from threading import Threadimport time try: from greenlet import getcurrent as get_ident # 协程的唯一标识except ImportError: try: from thread import get_ident except ImportEr