什么是中间件呢?“中间件”是一个函数,它在每个请求被特定的路径操作处理之前,以及在每个响应返回之前工作。
1. 它接受你的应用程序的每一个请求
2. 它可以对这个请求做一些事情或者执行任何需要的代码
3. 它将请求传递给应用程序的其他部分(通过某种路径操作)
4. 它获取应用程序生产的响应(通过某种路径操作)
5. 它可以对响应做些什么或者执行任何需要的代码
6. 它返回这个响应
那么看下如何创建中间件?
要创建中间件你可以在函数的顶部使用装饰器@app.middleware("http")
中间件接受如下参数:
1. request,不能省略
2. 一个函数 call_next,它将接收request作为参数
这个函数将request传递给响应的路径操作
然后它将返回由响应路径操作生成的response
3.然后你可以在返回response前进一步修改它
我们去实现一个中间件
from fastapi import FastAPI, Request
import time
app = FastAPI()
@app.middleware("http")
async def add_process_time_header(request: Request, call_next):
start_time = time.time()
response = await call_next(request)
process_time = time.time() - start_time
response.headers["X-Process-Time"] = str(process_time)
response.headers["mrli"] = "mrli"
return response
@app.get("/test_middleware")
def test_middleware():
return "this is test middleware"
if __name__ == '__main__':
import uvicorn
uvicorn.run("main:app", reload=True, debug=True)
我们这样就实现了一个中间件,在response的前后在任何路径操作收到request前,可以添加要和请求一起运行的代码,也可以在响应生成但是返回之前添加代码。
请求下接口看下输出结果,正常返回我们自己定义的输出结果是没有问题的
我们再看下响应头返回的结果
可以看到,响应头信息中有我们自己定义的中间件处理的结果,到此一个简单的中间件就实现了