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 章。

🌟 欢迎大家来观看!

相关推荐
threerocks13 小时前
Fable + GPT Image = 无敌,Claude Code 中使用 Codex(订阅)生图的方案
aigc·ai编程
刘棕霆13 小时前
29—AI Skill 测评集如何保持有效:从线上负反馈到 regression 用例
aigc·ai编程·测试
网易云信13 小时前
听说,我们搞了个 AI 编程"电子宠物"?
人工智能·aigc·ai编程
Lion0913 小时前
【03】Function Calling:让 LLM 拥有双手
人工智能·ai编程
ZJPRENO13 小时前
Claude 必备技能 codebase-memory-mcp
ai编程
妙码生花14 小时前
从 PHP 到 AI + Golang,程序员自救转型手记(十六):目录结构更新、完善 token 系统(AI 表示 token 入库无需加密?)
前端·后端·ai编程
程序me14 小时前
Prompt、Context、Harness、Loop 之后是什么? AI工程下一个半年的关键词
前端·后端·ai编程
饼干哥哥14 小时前
我把GPT-image-2生成PSD的能力打包成了Skill,免费开源
gpt·开源·ai编程
ClouGence14 小时前
DeepSeek 发布 DSpark:模型变快之后,普通人怎么把它用起来?
ai编程·deepseek
Yogic14 小时前
由 Claude Code 子包引发的 Spec Coding 质保方案思考与落地尝试
ai编程