1.基础用法
1 | from fastapi import Depends, FastAPI |
- 使用
Depends()声明依赖项,将参数注入路径操作函数 - 依赖项函数结构与路径操作函数相同,可接收查询参数、请求体等参数
- 请求流程:
graph TD A[客户端请求] --> B[FastAPI解析依赖项] B --> C[执行common_params函数] C --> D[返回处理后的字典] D --> E[注入read_items的commons参数]
2.带类型的依赖参数
1 | from pydantic import BaseModel |
- 支持Pydantic模型作为依赖项类型
- 自动执行三项核心功能:
- 请求解析:将查询参数映射到模型字段
- 数据验证:检查参数类型和约束条件
- 错误处理:自动生成422错误响应
3.依赖类型扩展
3.1 类依赖
1 | class Pagination: |
- 类依赖自动实例化,支持复杂参数初始化
3.2 生成器依赖
1 | from sqlalchemy.orm import Session |
- 支持
yield语法管理资源生命周期(如数据库连接)
4.依赖树结构
1 | def auth_header(token: str = Header(...)): |
- 支持多级依赖嵌套,形成依赖调用链
- 执行顺序:
auth_header → current_user → user_profile
5.实际应用场景
- 用户认证:验证JWT令牌并注入用户对象
- 数据库管理:自动获取/关闭数据库连接
- 请求日志:记录请求处理时间
- 参数预加工:格式化查询参数
注意事项
- 使用
Annotated注解可提升代码可读性(Python 3.10+) - 依赖项函数名需与参数名区分,避免命名冲突
- 通过
response_model可控制依赖项响应结构 - 生产环境建议配合
lifespan管理全局依赖