flask的上下文以及结构关系

1.分类

flask中有两种上下文:application_context(应用上下文),request_context(请求上下文),其中应用上下文就是一个flask实例app的上下文,请求上下文就是在这个app实例上线工作后,有一个访问请求过来,就会创建一个request_context。

*什么是上下文

  在计算机中,相对于进程而言,上下文就是进程执行时的环境。这个环境保存了各个变量和数据,包括所有的寄存器变量、进程打开的文件、内存信息等。可以理解上下文是环境的一个快照,是一个用来保存状态的对象。

  例如从一个 Flask App 读入配置并启动开始,就进入了它的 application_context,在他的全局中有各种各样的数据和变量存在,这个app只要不消亡或者重启,这些变量都保存在这个上下文中(类比计算机:某个程序运行时,它的变量都在给他分配的一块内存空间中,这个内存空间就是上下文),当app实例消亡或重启(我们这个网站后台关闭或重启),则上下文清空,将内存空间还给服务器。

  例如有一个用户访问一次我们的网站www.xxxx.com/login,那么他这一次访问(仅仅这一次)就生成了一个request_context,这个请求上下文就是在他这次访问中生成的,这个访问结束,请求上下文消亡。Flask的request对象只有在其请求上下文的生命周期内才有效,离开了请求的生命周期,其上下文环境不存在了,也就无法获取request对象了。(request对象指的是每次http请求发生时,WSGI server(比如gunicorn)调Flask.call()之后,在Flask对象内部创建的Request对象)

2.理解flask的设计结构

*为什么要有application_context呢

  因为,flask在设计的时候,就考虑到,可能我们的服务器上面不仅仅只部署一个WSGI程序,也就是一个服务器,我们可以同时部署几个不同的网站工作。

*application_context和request_context的关系是什么

  在一个app的生命周期中,会有很多的request生成,会有很多的request_context生成,我们将app和服务器和request的关系用图表示 

  一个服务器可以部署多个app应用(多个网站后台),每个app中会因访问产生多个request。不同app之间,同一个app中不同的request之间,都是隔离的。

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

原文地址:https://www.cnblogs.com/DylanHooz/p/8433672.html