【问题标题】:What are the advantages of using Depends in FastAPI over just calling a dependent function/class?在 FastAPI 中使用 Depends 与仅调用依赖函数/类相比有什么优势?
【发布时间】:2020-05-18 13:52:43
【问题描述】:

FastAPI 提供了一个way 来通过它自己的依赖解析机制来管理依赖,比如数据库连接。

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

是的,它会缓存(在单个处理程序运行期间),但我们不能仅使用@lru_cache 装饰器并在每次运行时简单地调用这些依赖项来实现相同的目的吗? 我错过了什么吗?

【问题讨论】:

    标签: python dependency-injection fastapi


    【解决方案1】:

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

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

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

    在这个来自FastAPI docs 的示例中,我们共享了公共搜索参数。

    async def common_parameters(q: str = None, skip: int = 0, limit: int = 100):
        return {"q": q, "skip": skip, "limit": limit}
    
    @app.get("/items/")
    async def read_items(commons: dict = Depends(common_parameters)):
        return commons
    
    @app.get("/users/")
    async def read_users(commons: dict = Depends(common_parameters)):
        return commons
    

    【讨论】:

    • 同意。但是,再次使用pytest 表示法,它们具有不同的“范围” - 即,只要请求正在处理,它们就会存在。如果我需要一个通过多个组合级别构建的应用程序生命周期的持久对象怎么办?
    • 是的,这些都是在每个请求上执行的。您必须自己在函数内部实现该逻辑。
    猜你喜欢
    • 2019-12-13
    • 2022-06-12
    • 2019-10-23
    • 2010-09-24
    • 2010-12-27
    • 2015-04-06
    • 2013-05-09
    • 2017-05-29
    • 2017-11-24
    相关资源
    最近更新 更多