· 约 3 分钟
16-FastAPI进阶-依赖注入
学习目标
- 理解依赖注入在 FastAPI 中的意义
- 学会抽离公共逻辑
- 掌握
Depends的典型使用方式
核心概念
- 依赖注入的核心思想是:把“路由函数要依赖的能力”交给 FastAPI 自动提供。
- 这样可以减少重复代码,让接口更清晰。
- 常见依赖包括:
- 数据库会话
- 登录用户信息
- 公共参数校验
- 分页参数解析
代码示例
from typing import Annotated
from fastapi import Depends, FastAPI, Header, HTTPException, Query
app = FastAPI()
def verify_token(x_token: Annotated[str, Header()]):
if x_token != "fastapi-course":
raise HTTPException(status_code=401, detail="令牌无效")
return x_token
def get_pagination(
page: Annotated[int, Query(ge=1)] = 1,
size: Annotated[int, Query(ge=1, le=50)] = 10,
):
return {
"page": page,
"size": size,
"offset": (page - 1) * size,
}
@app.get("/articles")
def get_articles(
_: Annotated[str, Depends(verify_token)],
pagination: Annotated[dict, Depends(get_pagination)],
):
return {
"message": "获取文章成功",
"pagination": pagination,
}
案例理解
verify_token用来做统一鉴权。get_pagination用来做统一分页参数处理。- 路由函数本身只关心“业务结果是什么”,不再重复写鉴权和分页解析代码。
易错点
Depends里传的是函数本身,不要写成Depends(verify_token())。- 依赖函数如果要抛出错误,直接
raise HTTPException即可。 - 依赖注入不是为了炫技,而是为了拆分公共逻辑、降低重复。
我的补充
- 学会
Depends之后,你会发现 FastAPI 的代码组织能力开始明显增强。 - 后面的数据库会话
get_db()就是最经典的依赖注入案例。 - 这一节是从“会写接口”走向“会组织项目”的关键一步。