Flask-应用(程序)上下文和请求上下文

“狗书”中有个地方讲到应用上下文和请求上下文,博主初次看的时候很懵逼,其实我们要理解这两个东西,最应该了解IT行业的“上下文”是什么意思,这样再去理解应用上下文和请求上下文就容易得多了,只是对博主来说是这样的。

什么是“上下文”

以下内容来自百度百科:

上下文, 英文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 %sp>' %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 请求上下文 请求对象,封装了客户端发出的HTTP请求中的内容
session 请求上下文 用户会话,用于存储请求之间需要“记住”的☞的字典

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

你可能感兴趣的:(Flask)