Python基础入门 Day55:FastAPI 中间件的使用与全局请求处理

32次阅读
没有评论

共计 1144 个字符,预计需要花费 3 分钟才能阅读完成。

中间件(Middleware)是介于请求和响应之间的一层,用于对请求 / 响应进行统一处理,例如记录日志、处理跨域、验证 token 等。在 FastAPI 中,中间件使用十分简洁。

一、定义中间件
FastAPI 使用 @app.middleware("http") 装饰器定义中间件函数。
例如:记录每个请求耗时的中间件

import time
from fastapi import Request

@app.middleware("http")
async def log_request_time(request: Request, call_next):
    start_time = time.time()
    response = await call_next(request)
    duration = time.time() - start_time
    print(f"{request.method} {request.url.path} completed in {duration:.4f}s")
    return response

二、中间件的典型用途

  1. 请求日志记录
  2. 请求限流
  3. 跨域处理(CORS)
  4. JWT 验证
  5. 性能监控
  6. 接口缓存

三、内置中间件:跨域处理(CORS)
FastAPI 提供了 CORSMiddleware

from fastapi.middleware.cors import CORSMiddleware

app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)

四、添加多个中间件的顺序
添加中间件是有顺序的,先添加的中间件会包裹后添加的中间件。

五、中间件与依赖的区别

  • 中间件影响所有请求(全局)
  • 依赖项只能绑定在特定路径 / 路由上
  • 中间件适合处理全局需求,如日志、跨域、统一异常等

六、中间件中的异常处理

@app.middleware("http")
async def custom_error_handler(request: Request, call_next):
    try:
        response = await call_next(request)
        return response
    except Exception as e:
        return JSONResponse(status_code=500, content={"detail": "Server Error"})

七、中间件 VS 路由依赖 VS 事件

场景 建议方案
请求预处理 中间件
某些路由统一依赖 路由依赖项
应用启动 / 关闭 事件处理器

八、总结
FastAPI 中间件提供了极其简洁灵活的方式处理跨请求逻辑。合理利用中间件可以增强项目的统一性与可维护性。下一节将介绍如何处理全局异常与自定义错误响应。

正文完
 0
评论(没有评论)