fastapi: 第十六章:fastapi使用全局中间件:请求和响应的拦截器
一,中间件的用途
什么是中间件?
中间件是一个在请求到达你的路由函数之前、以及响应返回给客户端之后,执行一些代码的组件。
可以把中间件想象成一个安检通道:
请求进来时,先经过安检(中间件)
安检通过后,才进入业务处理(路由函数)
业务处理完成后,响应出去之前,还要再经过一次安检
中间件能做什么?
中间件的应用场景非常多:
记录每个请求的日志
统计接口响应时间
添加统一的响应头(如X-Powered-By)
请求限流(防止恶意请求)
全局异常处理
CORS跨域处理
Gzip压缩响应内容
二,代码
定义中间件:
# app/middleware/log_time.py
from fastapi import FastAPI, Request
import time
# 一个简单的记录请求执行时间的中间件
async def log_time_middleware(request: Request, call_next):
# 这部分代码在请求进入路由前执行
start_time = time.time()
print(f"收到请求: {request.method} {request.url.path}")
# 调用下一个中间件或最终的路由函数
response = await call_next(request)
# 这部分代码在响应返回给客户端前执行
process_time = time.time() - start_time
print(f"处理耗时: {process_time:.4f}秒")
# 可以修改响应头
# response.headers["X-Process-Time"] = str(process_time)
return response
main.py中应用全局中间件
# main.py
from fastapi import FastAPI
from app.api import products, users, account
from app.core.exceptions import register_exception_handlers
from starlette.middleware.base import BaseHTTPMiddleware
# 📂 跨目录导入你的中间件函数
from app.middleware.log_time import log_time_middleware
# 创建FastAPI应用
app = FastAPI(title="我的API项目")
# 注册全局异常捕获
register_exception_handlers(app)
# 🚀 注册中间件(使用 BaseHTTPMiddleware 包装你的中间件)
app.add_middleware(BaseHTTPMiddleware, dispatch=log_time_middleware)
# 注册路由模块
app.include_router(users.router)
三,测试效果:

浙公网安备 33010602011771号