请求上下文和应用上下文
请求上下文:可以简单理解为客户端与服务器之间数据交互请求的容器
请求上下文对象有:request、Session
request:封装了HTTP请求的内容,针对的是http的请求
Session:用来记录请求回话中的信息,针对的是用户的信息
应用上下文:应用于存储应用程序中的变量,它的作用主要是帮助request获取当前的应用,它
是伴随request而生,随request而死
应用上下文对象有:current_app、g
current_app存储的变量:
- 应用程序启动的脚本是哪个文件,启动时指定了哪些参数
- 加载了哪些配置文件,导入了哪些配置
- 连接了那个数据库
- 有哪些public的工具类、常量
- 应用跑在哪个机器上,ip是多少,内存是多大
g变量:
g作为Flask程序全局的一个临时变量,充当中间媒介的作用,我们可以通过他传递一些数据,
g保存的是当前请求的全局变量,不同的请求会有不同的全局变量,可以通过不同的thread id区别
请求上下文和应用上下文的区别
请求上下文:保存了客户端和服务器交互的数据
应用上下文:Flask应用程序运行过程中,保存的一些配置信息,比如程序名、数据库连接、应用信息等。
注意:上下文中的对象只能在指定的上下文中使用,超出范围不能使用。
请求上下文和应用上下文原理和实现(有兴趣研究的可以参考一下):
https://segmentfault.com/a/1190000004223296
下面用代码演示一下请求上下文和应用上下文的用法
请求上下文:
from flask import Flask from flask import request app = Flask(__name__) # print(request.method) # 不存在请求范围之内(也就是说request在视图函数中才有效),所以会报错 # print(session.get("user_id","")) # 同样也会报错,错误类型当然也是超出请求范围 @app.route('/') def demo1(): print(request.method) # 当浏览器请求demo1时,打印出客户端的请求方式 return 'demo1' if __name__ == '__main__': app.run(debug = True)
应用上下文:
from flask import Flask from flask import current_app app = Flask(__name__) # print(current_app.config.get("DEBUG")) #报错,超出应用上下文的范围 @app.route('/') def demo1(): print(current_app.config.get("DEBUG")) # 打印当前应用程序DEBUG的状态 return 'demo1' if __name__ == '__main__': app.run(debug = True)