现在位置: 首页 > Flask 教程 > 正文

Flask 内部对象 API

Flask 提供了几个底层内部对象,用于访问活跃的应用上下文和蓝图的注册状态。大多数应用不需要直接使用它们。


AppContext 应用上下文

方法/属性 说明
AppContext(app) 创建应用上下文实例。通常不手动创建,使用 app.app_context()
push() 推入上下文栈。使 current_app、g 等代理指向此上下文
pop(error=None) 弹出上下文栈。执行 teardown 回调。error 为未处理的异常对象
app 此上下文关联的 Flask 应用
g 此上下文的 g 对象(_AppCtxGlobals 实例)
url_adapter URL 适配器(MapAdapter),用于 URL 构建
request 当前请求对象(Request)。仅在请求上下文中可用
session 当前 Session 对象。仅在请求上下文中可用

app_ctx 代理

属性 说明
flask.globals.app_ctx 指向当前活跃 AppContext 的代理。内部使用,多数情况用 current_app 和 g 即可

BlueprintSetupState

蓝图注册时的状态对象,可在 record 回调中使用。

属性 说明
app 蓝图注册到的 Flask 应用
blueprint 被注册的 Blueprint 实例
url_prefix 蓝图的 URL 前缀
subdomain 蓝图的子域名
url_defaults 蓝图的 URL 默认值
options 注册蓝图时传入的额外选项

废弃的 RequestContext

自 Flask 3.2 起,RequestContext 已合并到 AppContext。相关的 request_ctx 代理也已合并到 app_ctx。旧名称将在 Flask 4.0 中移除。


代码示例

实例

from flask import Flask
from flask.ctx import AppContext

app = Flask(__name__)

# 手动管理应用上下文
ctx = app.app_context()
ctx.push()
# current_app 和 g 现在可用
from flask import current_app, g
g.user = "runoob"
# 执行操作...
ctx.pop()  # 触发 teardown 回调,g 被清理

# with 语句方式(推荐)
with app.app_context():
    g.temp_data = 42
# 退出 with 后自动 pop