千家信息网

Flask上下文举例分析

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,本篇内容介绍了"Flask上下文举例分析"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、上下文概念
千家信息网最后更新 2026年10月31日Flask上下文举例分析

本篇内容介绍了"Flask上下文举例分析"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

1、上下文概念

上下文,说白了就是所谓的语境,就是语言环境。比如单独拎出来一篇文章的某一句话,我们可能不能理解它的意思,但是通过这句话所处的语言环境,再结合它前后的语句,就能很轻易的理解。

我们可以把上下文理解为当前环境的快照,是一个用来保存状态的对象。在代码执行的某个时刻,根据上下文的代码逻辑,可以决定在当前时刻下使用到的环境变量等。

2、Flask中的上下文

Flask 中有两种上下文,应用上下文(application context)和请求上下文(request context):

  • application:指的是调用app = Flask(__name__)创建的 Flask 对象

  • request:指的是每次 HTTP 请求发生时,在 Flask 对象内部创建的 Request 对象

2.1请求上下文

在Flask中处理请求时,应用会生成"请求上下文"对象,保存当前请求的相关数据信息,整个请求的处理过程,都会在这个上下文对象中进行,保证请求的处理过程独立不受干扰。

请求上下文对象有:request和session,下面以request为例具体讲解。

在上篇文章Flask 请求钩子的实现 我们说过,在 Flask 中有四种常用的请求钩子,分别是:before_first_request、before_request、after_request和teardown_request。

@app.before_first_requestdef before_first_request():    print(request.url)    print('before_first_request')@app.before_requestdef before_request():    print(request.url)    print('before_request')@app.after_requestdef after_request(response):    print(request.url)    print('after_request')    return response@app.teardown_requestdef teardown_request(e):    print(request.url)    print('teardown_request')@app.route('/test')def test():    print(request.url)    return 'test'

通过请求我们发现,在每个请求钩子装饰的处理函数中,我们都可以直接访问 request 对象。而且,在其他普通函数内,无法访问 request 对象,说明 request 对象并不是真正的全局变量,只是在请求上下文的生命周期内可以访问,离开了请求的生命周期,就无法访问了。上面的请求钩子装饰的处理函数,在请求处理的不同阶段执行,自然其内部也可以访问 request 对象。

2.2应用上下文

上面说请求上下文是和请求相关,请求上下文对象保存的是请求的相关数据信息,下面说一下应用上下文,所谓应用上下文,就是和当前应用相关的,应用上下文对象是包含当前应用相关的信息。

应用上下文对象有:current_app和g。

我们了解到,每个请求,都有一个 request 对象和视图函数对应,可以理解为当前请求(current request), 而程序也会有多个实例的情况,为了能获取对应的程序实例,而不是固定的某一个程序实例,我们就需要使用 current_app变量。

from flask import Flask, current_appapp = Flask("tigeriaf_app")@app.route('/')def index():    return 'Hello, {}!'.format(current_app.name)

current_app是一个本地代理,它的类型是werkzeug.local.LocalProxy,它所代理的即是app对象,也就是说current_app == LocalProxy(app)。所以通过current_app.name可以获取当前应用的名称,也就是tigeriaf_app,使用current_app是因为它也是一个ThreadLocal变量,对它的改动不会影响到其他线程。我们可以通过current_app._get_current_object()方法来获取app对象。也可以在current_app中存储一些自定义的变量。

current_app只在请求线程内存在,它的生命周期就是在应用上下文里。离开了应用上下文,current_app一样无法使用。

g对象是 Flask 程序全局的一个临时变量,充当中间媒介的作用。我们可以通过它传递一些数据,g保存的是当前请求的全局变量,每次请求都会重设这个值,我们通常会使用它结合请求钩子来保存每个请求处理前所需要的全局变量,比如当前登入的用户对象,数据库连接等。 比如,使用g对象保存请求的 token,在视图函数中就可以直接使用g.name获取对应的值了。

from flask import g@app.before_requestdef get_token():    g.name = request.headers.get("token")

"Flask上下文举例分析"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

上下 上下文 对象 应用 变量 处理 函数 钩子 全局 就是 数据 环境 程序 信息 周期 实例 生命 过程 分析 也就是 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技企业 百单网互联网科技有限公司 新华互联网科技 山东特亿宝互联网科技有限公司 美国互联网保险保险科技 互联网科技公司的优势 腾讯阿里互联网科技 互联网金融 科技金融 智慧科技互联网 互联网科技缩写 阿里巴巴算科技企业还是互联网 中化能源互联网科技招聘 南山科技园互联网公司有哪些 中国航天科技大学国际工业互联网 山东星卡互联网科技有限公司官网 厦门江牛科技互联网 扫呗互联网科技有限公司 上海万顺科技互联网有限公司招聘 华人运通互联网科技公司 黑龙江互联网科技公司 中资互联网科技 上海喔噻互联网科技 互联网金融科技平台 互联网科技大会 栖莱科技互联网股份有限公司 互联网对科技的发展 河南猎农互联网科技有限公司 滨湖区互联网智能科技产品有哪些 伍佰万互联网科技怎么赚钱 中国互联网有什么科技
0