依赖注入 Depends 📅 发布时间:2026/8/23 23:00:26 👁 浏览次数: 一、什么是依赖注入依赖注入就是在视图函数执行之前先执行一段公共逻辑代码这段代码处理完毕后可以吧返回结果交给视图函数使用适用业务场景1.复用公共业务逻辑消除重复代码2.统一获取数据库连接3.接口安全校验、参数校验、角色权限判断4.分页、查询参数统一处理核心思想把重复的代码抽离出来做成依赖项那些接口需要就在哪个接口注入这个依赖不用重复每个接口写一遍二、函数作为依赖项函数依赖把公共逻辑封装成普通函数使用Depends(函数名)完成注入。这里示例多个列表查询接口都需要q搜索条件、skip偏移、limit分页条数就可以抽成公共依赖函数。from fastapi import FastAPI, Depends from typing import Dict app FastAPI() # 定义依赖函数公共查询参数 async def common(q: str | None None, skip: int 0, limit: int 10): return {q: q, skip: skip, limit: limit} # 接口1获取items #依赖函数返回的是什么类型就写什么类型这里的是Dict app.get(/items) async def read_items(common: Dict Depends(common)): print(common.get(q), common.get(skip), common.get(limit)) return {message: ok} # 接口2获取users复用同一套依赖 app.get(/users) async def read_users(common: Dict Depends(common)skip: int1): return common提示视图函数除了注入的依赖还可以继续写自己独有的查询参数二者可以共存(如接口2所示)。三、类作为依赖项类依赖当业务逻辑负责除了接收参数还需要封装很多工具方法就推荐使用类依赖FastAPI 会自动执行类的__init__方法接收 url 查询参数实例化对象传给接口。from fastapi import FastAPI, Depends app FastAPI() fake_items_db [{item_name: Foo}, {item_name: Bar}, {item_name: Baz}] # 类依赖 class CommonQueryParams: def __init__(self, q: str | None None, skip: int 0, limit: int 100): # 接收查询参数赋值实例属性 self.q q self.skip skip self.limit limit # 类中自定义业务方法 def get_query_params(self): query_params [] if self.q: query_params self.q.split( ) return query_params app.get(/items/) async def read_items(commonsDepends(CommonQueryParams)): response {} if commons.q: response.update({q: commons.q}) items fake_items_db[commons.skip: commons.skip commons.limit] response.update({items: items}) return response app.get(/books) async def get_books(paramsDepends(CommonQueryParams), skip: int 0): # 可以调用依赖类里面的方法 print(params.q) print(params.get_query_params()) print(接口自身的skip参数, skip) return {message: ok}关键知识点Depends(CommonQueryParams)只写类名不要写括号CommonQueryParams()FastAPI 会自动实例化。拿到的params是类的实例对象可以直接访问self属性调用类内部定义的方法。注入依赖之后接口依旧可以声明属于自己的独立参数互不冲突。四、函数依赖 vs 类依赖怎么选类型适用场景函数依赖逻辑简单只做参数处理、返回字典不需要封装方法类依赖逻辑复杂需要封装多个业务工具方法属性较多五、总结Depends依赖注入核心价值抽离公共逻辑消除大量重复代码。函数依赖简单场景返回字典数据。类依赖复杂场景可以拥有实例属性、自定义成员方法。依赖注入参数 接口自有参数可以共存互不干扰。实际项目中权限校验、获取 db 会话、统一分页都会大量使用依赖注入。