FastAPI中是否存在Flask teardown_request的等效实现?
FastAPI 中类似 Flask teardown_request 的实现方式
FastAPI 没有直接对应 Flask teardown_request 的内置装饰器,但可以通过带 yield 的依赖项实现请求结束后执行会话关闭逻辑,这是官方推荐的请求生命周期管理方案。
实现思路
定义一个包含 yield 的依赖函数:
yield之前的代码会在请求处理前执行(按需添加)yield之后的代码会在请求结束后执行,无论请求是否成功、是否抛出异常,完全匹配teardown_request的行为
代码示例
全局应用(所有路由自动生效)
from fastapi import FastAPI, Depends from models import storage def close_session_on_teardown(): yield # 请求结束后执行会话关闭 storage.close_session() # 全局注册依赖,所有路由都会自动执行请求后的清理操作 app = FastAPI(dependencies=[Depends(close_session_on_teardown)]) @app.get("/items/{item_id}") def read_item(item_id: int): return {"item_id": item_id}
单独路由应用(仅指定路由生效)
from fastapi import FastAPI, Depends from models import storage app = FastAPI() def close_session_on_teardown(): yield storage.close_session() @app.get("/items/{item_id}", dependencies=[Depends(close_session_on_teardown)]) def read_item(item_id: int): return {"item_id": item_id}
严谨写法(确保异常场景下也能关闭会话)
如果需要更严谨的异常处理,可以结合 try/finally:
def close_session_on_teardown(): try: yield finally: # 无论是否抛出异常,都会执行会话关闭 storage.close_session()
内容的提问来源于stack exchange,提问作者coolboimax
相关产品推荐
相关产品推荐

