Python 在FastAPI中使用Dependes比只调用依赖函数/类有什么好处?

Python 在FastAPI中使用Dependes比只调用依赖函数/类有什么好处?,python,dependency-injection,fastapi,Python,Dependency Injection,Fastapi,FastAPI通过自己的依赖项解析机制提供了管理依赖项(如DB连接)的方法 它类似于pytest夹具系统。 简而言之,您在函数签名中声明了所需内容,FastAPI将调用您提到的函数(或类),并在调用处理程序时注入正确的结果 是的,它进行缓存(在单个处理程序运行期间),但是我们不能只使用@lru\u cache装饰器并在每次运行时简单地调用这些依赖项来实现同样的功能吗? 我遗漏了什么吗?FastAPI还会将请求中的参数注入到依赖项中,并将它们包含到OpenApi规范中 这允许您重用参数,这可以帮助

FastAPI通过自己的依赖项解析机制提供了管理依赖项(如DB连接)的方法

它类似于
pytest
夹具系统。 简而言之,您在函数签名中声明了所需内容,FastAPI将调用您提到的函数(或类),并在调用处理程序时注入正确的结果

是的,它进行缓存(在单个处理程序运行期间),但是我们不能只使用
@lru\u cache
装饰器并在每次运行时简单地调用这些依赖项来实现同样的功能吗?
我遗漏了什么吗?

FastAPI还会将请求中的参数注入到依赖项中,并将它们包含到OpenApi规范中

这允许您重用参数,这可以帮助您编写更少的代码,尤其是当您的项目变大时

如果没有依赖项注入,每次都必须在每个路由上指定参数

在来自的示例中,我们共享了公共搜索参数

async def common_参数(q:str=None,skip:int=0,limit:int=100):
返回{“q”:q,“skip”:skip,“limit”:limit}
@app.get(“/items/”)
异步def read_项(commons:dict=Depends(common_参数)):
返回公地
@app.get(“/users/”)
异步def read_用户(commons:dict=Depends(common_参数)):
返回公地

同意。但是,再次使用
pytest
表示法,它们具有不同的“范围”——即,只要请求正在处理,它们就一直有效。如果我需要一个应用生命周期的持久对象,它是通过几个合成级别构建的呢?是的,每个请求都会执行这些。您必须自己在函数内部实现该逻辑。