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
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
