zoukankan      html  css  js  c++  java
  • FastAPI 学习之路(二十四)子依赖项

    FastAPI 支持创建含子依赖项的依赖项。并且,可以按需声明任意深度的子依赖项嵌套层级。

        FastAPI 负责处理解析不同深度的子依赖项。

        我们去实现一个简单的demo

    from fastapi import Depends, FastAPI
    from  typing import Optional
    app = FastAPI()
    fake_items_db = [{"city": "beijing"}, {"city": "shanghai"},
                     {"city": "heze"}]
    
    def query_extractor(desc: Optional[str] = None):
        return desc
    def query__extractor(
        desc: str = Depends(query_extractor),
            name: Optional[str]="" ,
    ):
        if not desc:
            return name
        return desc
    @app.get("/items/")
    def read_items(query__extractor: str = Depends(query__extractor)):
    
        return query__extractor

    我们去看下接口请求

     

    我们可以看到,我们实现的子依赖是成功的。

      • 尽管该函数自身是依赖项,但还声明了另一个依赖项(它「依赖」于其他对象)

        • 该函数依赖 query_extractor, 并把 query_extractor 

          的返回值赋给参数 desc

      • 同时,该函数还声明了类型是 str 的可选name

    用户未提供desc 时,则使用name

    多次使用同一个依赖项

      • 如果在同一个路径操作 多次声明了同一个依赖项,例如,多个依赖项共用一个子依赖项,FastAPI 在处理同一请求时,只调用一次该子依赖项。

      • FastAPI 不会为同一个请求多次调用同一个依赖项,而是把依赖项的返回值进行「缓存」,并把它传递给同一请求中所有需要使用该返回值的「依赖项」。

        

        其实依赖注入系统非常简单。

        依赖注入无非是与路径操作函数一样的函数罢了。

        但它依然非常强大,能够声明任意嵌套深度的「图」或树状的依赖结构。

    文章首发在公众号,欢迎关注。

  • 相关阅读:
    对象池使用时要注意几点
    Flash3D学习计划(一)——3D渲染的一般管线流程
    714. Best Time to Buy and Sell Stock with Transaction Fee
    712. Minimum ASCII Delete Sum for Two Strings
    647. Palindromic Substrings(马拉车算法)
    413. Arithmetic Slices
    877. Stone Game
    338. Counting Bits
    303. Range Sum Query
    198. House Robber
  • 原文地址:https://www.cnblogs.com/leiziv5/p/15416726.html
Copyright © 2011-2022 走看看