""" 中间件模块 """ import time import logging from fastapi import Request from starlette.middleware.base import BaseHTTPMiddleware from starlette.middleware.cors import CORSMiddleware # 配置日志 logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) class LoggingMiddleware(BaseHTTPMiddleware): """日志中间件""" async def dispatch(self, request: Request, call_next): start_time = time.time() # 记录请求信息 logger.info(f"Request: {request.method} {request.url.path}") response = await call_next(request) # 计算处理时间 process_time = time.time() - start_time # 记录响应信息 logger.info( f"Response: {request.method} {request.url.path} " f"- Status: {response.status_code} - Time: {process_time:.3f}s" ) response.headers["X-Process-Time"] = str(process_time) return response def setup_cors(app): """配置CORS""" app.add_middleware( CORSMiddleware, allow_origins=["*"], # 生产环境应该限制具体域名 allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) def setup_middleware(app): """设置所有中间件""" setup_cors(app) app.add_middleware(LoggingMiddleware)