前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >FastAPI 学习之路(二十四)子依赖项

FastAPI 学习之路(二十四)子依赖项

作者头像
雷子
发布2021-08-25 10:12:38
6020
发布2021-08-25 10:12:38
举报
文章被收录于专栏:雷子说测试开发

FastAPI 系列文章:

FastAPI 学习之路(一)

FastAPI 学习之路(二)

FastAPI 学习之路(三)

FastAPI 学习之路(四)使用pydantic模型做请求体

FastAPI 学习之路(五)

FastAPI 学习之路(六)

FastAPI 学习之路(七)

FastAPI 学习之路(八)

FastAPI 学习之路(九)

FastAPI 学习之路(十)

FastAPI 学习之路(十一)

FastAPI 学习之路(十二)额外数据类型

FastAPI 学习之路(十三)Cookie 参数,Header参数

FastAPI 学习之路(十四)响应模型

FastAPI 学习之路(十五)响应状态码

FastAPI 学习之路(十六)Form表单

FastAPI 学习之路(十七)上传文件

FastAPI 学习之路(十八)表单与文件

FastAPI 学习之路(十九)处理错误

FastAPI 学习之路(二十)接口文档配置相关

FastAPI 学习之路(二十一)请求体 - 更新数据

FastAPI 学习之路(二十二)

FastAPI 学习之路(二十三)

前言

我们之前分享类作为依赖的注入,这次分享子依赖项。

正文

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

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

我们去实现一个简单的demo

代码语言:javascript
复制
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 不会为同一个请求多次调用同一个依赖项,而是把依赖项的返回值进行「缓存」,并把它传递给同一请求中所有需要使用该返回值的「依赖项」。

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

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

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

后记

发现问题,解决问题。遇到问题,慢慢解决问题即可。

欢迎关注雷子说测试开发,后续将会持续为大家分享更多的技术知识

如果你有问题可以留言或者加我微信:952943386。2021,一起牛转钱坤,一起牛逼。

如果觉得这篇文章还不错,来个【分享、点赞、在看】三连吧,让更多的人也看到~

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-08-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 雷子说测试开发 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • FastAPI 系列文章:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档