中间件
小于 1 分钟
中间件
对于每一个 request
请求到来, 在到达应用(业务逻辑处理)之前会先经过一/多层中间件处理后到达应用(视图, 函数等) , 在返回前经过一/多层中间件处理, 返回结果给客户端
可以使用中间件拦截所有的 request
请求或者 response
响应
在 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
需要注意的是带yield的依赖的退出部分的代码 和 后台任务 会在中间件之后运行