Flask 应用上下文

Posted niuxingyu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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()

 

以上是关于Flask 应用上下文的主要内容,如果未能解决你的问题,请参考以下文章

flask基础之请求钩子

如何在android的片段中设置应用程序上下文?

Flask源码之请求上下文和应用上下文

Flask钩子函数

Flask框架钩子函数使用方式及应用场景分析

Flask中的http请求与响应