Flask 应用上下文
应用上下文(application context)
它的字面意思是 应用上下文,但它不是一直存在的,它只是request context 中的一个对 app 的代理(人),所谓local proxy。它的作用主要是帮助 request 获取当前的应用,它是伴 request 而生,随 request 而灭的。
应用上下文对象有:current_app,g
current_app
应用程序上下文,用于存储应用程序中的变量,可以通过current_app.name打印当前app的名称,也可以在current_app中存储一些变量,例如:
应用的启动脚本是哪个文件,启动时指定了哪些参数
加载了哪些配置文件,导入了哪些配置
连了哪个数据库
有哪些public的工具类、常量
应用跑再哪个机器上,IP多少,内存多大
current_app.name(打印文件名)
current_app.test_value='value'
from flask import Flask, current_app, g app = Flask(__name__) app.config.from_pyfile('config.ini') @app.route('/') def index(): # current_app模块用来存储当前应用的具体配置信息 print(current_app.__dict__) if __name__ == "__main__": app.run()
g变量
g 作为 flask 程序全局的一个临时变量,充当者中间媒介的作用,我们可以通过它传递一些数据,g 保存的是当前请求的全局变量,不同的请求会有不同的全局变量,通过不同的thread id区别
g.name='abc'
注意:不同的请求,会有不同的全局变量
两者区别:
请求上下文:保存了客户端和服务器交互的数据
应用上下文:flask 应用程序运行过程中,保存的一些配置信息,比如程序名、数据库连接、应用信息等
导包文件:
from flask import Flask, g def check_username(): username = '你好' g.username = '789' g.name = "222" print(username)
配置文件:
from flask import Flask, current_app, g # 从自定义的工具文件内部引用check_username方法 from utils import check_username app = Flask(__name__) app.config.from_pyfile('config.ini') @app.route('/') def index(): # 打印全局对象g里自定义的属性username check_username() print(g.name) return g.username if __name__ == "__main__": app.run()