FastAPI 学习之路(三十)中间件

什么是中间件呢?“中间件”是一个函数,它在每个请求被特定的路径操作处理之前,以及在每个响应返回之前工作。

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前,可以添加要和请求一起运行的代码,也可以在响应生成但是返回之前添加代码。

请求下接口看下输出结果,正常返回我们自己定义的输出结果是没有问题的

 我们再看下响应头返回的结果

FastAPI 学习之路(三十)中间件_第1张图片

 可以看到,响应头信息中有我们自己定义的中间件处理的结果,到此一个简单的中间件就实现了

你可能感兴趣的:(fastapi,fastapi)