flask学习笔记-07

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/CSDNgaoqingrui/article/details/82531717

flask07-应用上下文和请求上下文


在Flask中有两种上下文:应用(程序)上下文和请求上下文。

变量名

上下文

说明

current_app

应用上下文

当前激活程序的程序实例

g

应用上下文

处理请求时用作临时存储的对象。每次请求都会重设这个变量

request

请求上下文

请求对象,封装了客户端发出的HTTP请求中的内容

session

请求上下文

用户会话,用于存储请求之间需要“记住”的☞的字典

什么是“上下文”

上下文, 英文context,其完整意思应当是concatenate-text,联系文本,在IT行业中译为上下文其实并不确切也不容易理解,尤其是对于初学者,把它翻译为“引用池”或者“引用区”更加恰当。

在java的JSP中的内置对象中的PageContext,事实上,它就是本页面的一个单独的储存区域,里面存放的是各个地方(各个范围)传过来的属性的键值对的总汇。比如说,从Application里面存储了apptime,appname等等属性,在Session中又存了sessionid sessionstate等等属性,在request范围中又存了username,password等属性的键值对,那么PageContext就会把所有能得到的属性全部集中到一个区域里,你可以通过这个小容器,接收和调用到各个范围传递过来的属性,这就是所谓的”上下文“, 你可以把它记为”引用池“!

Flask中的上下文

为了避免大量可有可无的参数把视图函数弄得一团糟,Flask使用上下文临时把某些对象变为全局访问。有了上下文,就可以写出下面的视图函数:

from flask import request

@app.route('/')def index();

user_agent = request.headers.get('User-Agent')

return '<p>Your Browser is %s</p>' %user_agent

这里的request属于请求上下文,请求对象,封装了客户端发出的HTTP请求中的内容,距离说明:假设前端使用ajax带参数 data:{a:b} 请求一个后端接口,我们用Python写的后端接口就可以使用request这个“全局变量”来获取ajax的请求数据,如果接口是post,put类型,则可以使用

data = request.form

获取,如果是get请求,则是可以使用

data=request.args

获取,这里不再详细说明,转接一个博客可以了解flask获取request参数 

http://blog.csdn.net/u013055678/article/details/70214756,这里的“全局变量”我们加引号是因为我们只是把他当做全局变量来使用,但实际上并不是真正的全局变量。比如,在多线程服务器中,多个线程同时处理不同客户端发送的不同请求时,每个线程看到的request对象是不可能相同的。Flask使用上下文让特定的变量在一个线程中全局可以访问,与此同时却不会干扰其他线程。

Flask在分发请求之前激活应用和请求上下午文,请求处理完成后再将其删除。程序上下文被推送后,就可以在线程中使用current_app和g变量。类似的,请求上下文被推送后,就可以使用request和session变量。如果使用这些变量是我们没有激活程序上下文或请求上下文,就会导致错误。 

猜你喜欢

转载自blog.csdn.net/CSDNgaoqingrui/article/details/82531717