FastAPI 依赖注入系统(三) 子依赖项
作者:麦克煎蛋 出处:https://www.cnblogs.com/mazhiyong/ 转载请保留这段声明,谢谢!
我们可以创建有子依赖项的依赖项,具体依赖深度不受限制。
FastAPI会处理好依赖项之间的关系。
我们先声明第一个依赖项函数:
def query_extractor(q11: str, q12: str): return q11 + q12
然后声明第二个依赖项函数:
def query_or_cookie_extractor(q2: str = Depends(query_extractor), last_query: str = Cookie(None)): if not q2: return last_query return q2
在第二个依赖项函数中,同时又声明了它对第一个依赖项函数的依赖。
完整示例:
from fastapi import Cookie, Depends, FastAPI app = FastAPI() def query_extractor(q11: str, q12: str): return q11 + q12 def query_or_cookie_extractor(q2: str = Depends(query_extractor), last_query: str = Cookie(None)): if not q2: return last_query return q2 @app.get("/items/") async def read_query(query_or_default: str = Depends(query_or_cookie_extractor)): return {"q_or_cookie": query_or_default}
我们在路径操作函数中,仅声明了一个依赖项query_or_cookie_extractor。
但FastAPI知道它必须首先解决第一个依赖项query_extractor,然后把结果传递给第二个依赖项。
通过可交互式文档,我们可以直观的看到实际路径参数:
通过可交互式文档我们可以及时进行文档查看以及代码调试。
依赖项的多次调用
如果某个依赖项在同一个路径操作中被声明了多次,例如,多个依赖项都有一个共同的子依赖项,那么FastAPI默认在每一次请求中只会调用这个依赖项一次。
FastAPI会把这个依赖项的返回值缓存起来,然后把这个值传递给需要的依赖项,而不是在同一个请求中多次调用这个依赖项。
在有些场景下,我们并不需要缓存这个依赖项的返回值,而是需要多次调用,那么我们可以使用参数use_cache=False
来禁止依赖项的缓存。
async def needy_dependency(fresh_value: str = Depends(get_value, use_cache=False)): return {"fresh_value": fresh_value}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2012-06-08 CentOS下配置iptables防火墙
2012-06-08 NSAutoreleasePool自动释放池
2012-06-08 ios中提示信息的实现及自动消失
2012-06-08 文章逐步迁移过来
2012-06-08 什么是Toll-free bridging
2012-06-08 CFArrayRef和NSArray
2012-06-08 ios导航条添加按钮