FastAPI 全栈后端(六):中间件与依赖注入

创作者: Yardon | GitHub: github.com/YardonYan | 版本: v1.0 |



中间件是什么

中间件是请求到达路由之前 和响应返回客户端之后的执行层。比喻:HTTP 请求像快递,中间件就是快递沿途的检查站------每个检查站都可以:

  • 修改快递(加/改 Header)
  • 拒收快递(直接返回 403)
  • 记录快递信息(打日志)
python 复制代码
from fastapi import Request, Response
from fastapi.middleware.base import BaseHTTPMiddleware

class LogMiddleware(BaseHTTPMiddleware):
    async def dispatch(self, request: Request, call_next):
        print(f"→ {request.method} {request.url}")
        response: Response = await call_next(request)
        print(f"← {response.status_code}")
        return response

CORS 中间件

前后端分离必配,否则浏览器会拦截跨域请求。

python 复制代码
from fastapi.middleware.cors import CORSMiddleware

app.add_middleware(
    CORSMiddleware,
    allow_origins=["https://glimmerai.top", "http://localhost:5173"],
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)

依赖注入系统详解

FastAPI 的依赖注入是它最强大的特性之一。

python 复制代码
def get_db():
    db = SessionLocal()
    try:
        yield db
    finally:
        db.close()

def get_current_user(token: str = Depends(oauth2_scheme)):
    return verify_token(token)

@app.get("/me")
async def read_me(
    db: Session = Depends(get_db),
    user: User = Depends(get_current_user),
):
    return user

本章小结

特性 用途
中间件 全局请求/响应处理(CORS、日志、限流)
依赖注入 复用逻辑、权限控制、数据库会话管理
全局依赖 应用到所有路由
局部依赖 只应用到特定路由

下一章:测试与文档------用 pytest 保证质量,用 OpenAPI 自动生成文档。


📌 创作者: Yardon | 🏠 个人网站: GlimmerAI.top

📖 本章是「FastAPI 全栈后端」系列的第 6 章。

🌟 欢迎大家来观看!

相关推荐
goehou4 小时前
MCP 查数实战:让 LLM 安全地查数据库(只读账号、SQL 校验、参数漂移)
数据库·ai·llm·教程·mcp·function calling
小蠢驴打代码5 小时前
给 Codex Plan 模式加一本决策账本:问过什么、选了什么,都进仓库
开源·openai·ai编程
VIP_CQCRE6 小时前
给团队搭一个 AI 工作台:Open WebUI 接入 Ace Data Cloud 实战
docker·ai·rag·open webui·ace data cloud
Smoothcloud润云6 小时前
PyTorch推理服务动态批处理实战:兼顾吞吐与延迟
人工智能·pytorch·python·深度学习·ai·gpu算力
就叫飞六吧6 小时前
nat打洞和frp区别
ai编程
桃西西呀7 小时前
LangGraph4j之一:客服请求分诊既要循环又要分流,我用 LangGraph4j 把控制流抽成了数据
人工智能·llm·ai编程
奈落249 小时前
独立的AI编程助手正在消失?从文心快码并入百度搭子、Qwen Code转向CLI,看编程工具正被吸收进更大的智能体平台
百度·agent·ai编程·ai 编程
Wang's Blog9 小时前
Java 中间件之 RabbitMQ 快速入门: SpringAMQP 消息转换器
java·中间件·java-rabbitmq
有毒的教程9 小时前
Comfy Desktop下载安装教程-ComfyUI官方桌面版文生图模型配置与图像生成完整图文步骤
ai编程
寒狼GPT9 小时前
Codex 5小时额度是固定重置还是滚动恢复?为什么每个人Reset时间不一样
chatgpt·程序员·ai编程