跳至主要內容

中间件

小于 1 分钟

中间件


【独家新技术】从0到1学习 FastAPI 框架的所有知识点_哔哩哔哩_bilibiliopen in new window

对于每一个 request 请求到来, 在到达应用(业务逻辑处理)之前会先经过一/多层中间件处理后到达应用(视图, 函数等) , 在返回前经过一/多层中间件处理, 返回结果给客户端

可以使用中间件拦截所有的 request 请求或者 response 响应

image-20220501005558644

main app

@app.middleware('http')
async def add_process_time_header(request: Request, call_next):
    """拦截所有 request 请求, 计算其在框架中的处理时间并把结果加载 response header 中
    :param request: request 请求
    :param call_next: 将接收request请求做为参数
    """
    start_time = time.time()
    response = await call_next(request)
    process_time = time.time() - start_time
    response.headers['X-Process-Time'] = str(process_time)  # 添加自定义的以“X-”开头的请求头
    return response

image-20220501010427259

需要注意的是带yield的依赖的退出部分的代码 和 后台任务 会在中间件之后运行