经过一段时间的学习,发现FastAPI中有几个重要的部分分别是 中间件, 依赖项, 路径操作函数, 后台应用。对此比较好奇,这几个部分如果同时出现在一个应用中,它们的执行顺序是什么样的?
今天主要是抱着这样的想法,写一个程序来验证这个执行顺序。
验证程序
该程序中分别添加了中间件,依赖函数,路径操作函数和后台应用。
from fastapi import FastAPI,BackgroundTasks,Depends,Request
# 创建一个FastAPI实例对象
app = FastAPI(title="演示依赖——中间件——后台应用的执行顺序")
# 创建一个依赖函数
async def dependfun():
print("来自依赖函数的输出")
return None
# 创建一个中间件
@app.middleware("http")
async def middlewarefun(req:Request,call_next):
print("来自中间件请求部分的输出")
resp = await call_next(req)
print("来自中间件响应部分的输出")
return resp
# 创建一个后台应用函数
async def backgroundfun():
print("来自后台函数的输出")
# 创建一个路径修饰器及其路径操作函数
@app.get("/")
async def test(bt:BackgroundTasks,md=Depends(dependfun)):
bt.add_task(backgroundfun)
print("来自路径操作函数的输出")
return {"msg":"OK"}
if __name__ == "__main__":
import uvicorn
uvicorn.run(app="main:app",host="127.0.0.1",port=8080)
执行结果:
执行顺序说明
从程序执行的结果可以看出,这几个部分的执行顺序如下:
中间件请求部分处理 --> 依赖项处理 --> 路径操作函数处理 --> 中间件响应部分处理 --> 后台应用处理。