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

摘要:
FastAPI提供了一个易于使用但功能强大的依赖注入系统。一种声明要运行的代码所需或要使用的“依赖项”的方法。然后,系统负责执行任何所需的逻辑,并为代码提供这些依赖关系。fromtypengimportOptionalfromfastapiimportDepends,FastAPIapp=FastAPI()defcommon_参数:return{“q”:q,“skip”:skip,“limit”:limit}@app.getdefread_项:returncommons@app.getdefread_users:returncommons让我们看看最终请求依赖函数的形式和结构,它与路径操作函数相同。依赖项可以返回各种内容。本示例中的依赖项预期接收以下参数:str类型的可选查询参数、q类型的可选参数、int类型的可选搜索参数,默认值为0,int类型的默认查询参数,默认为100,然后依赖函数返回包含这些值的dict。

   

    FastAPI 提供了简单易用,但功能强大的依赖注入系统。这个依赖系统设计的简单易用,可以让开发人员轻松地把组件集成至 FastAPI。

什么是依赖注入?

    

    声明代码(本文中为路径操作函数 )运行所需的,或要使用的「依赖」的一种方式。

然后,由系统(本文中为 FastAPI)负责执行任意需要的逻辑,为代码提供这些依赖(注入依赖项)。

依赖注入常用于以下场景:

  • 共享业务逻辑(复用相同的代码逻辑)

  • 共享数据库连接

  • 实现安全、验证、角色权限

  • 等……

上述场景均可以使用依赖注入,将代码重复最小化。

  

接下来,我们学习一个非常简单的例子,尽管它过于简单,不过很实用。

from typing import Optional
from fastapi import Depends, FastAPI
app = FastAPI()
def common_parameters(q: Optional[str] = None,
                            skip: int = 0,
                            limit: int = 100):
    return {"q": q, "skip": skip, "limit": limit}
@app.get("/items/")
def read_items(commons: dict = Depends(common_parameters)):
    return commons
@app.get("/users/")
def read_users(commons: dict = Depends(common_parameters)):
    return commons

我们看下最后的请求

FastAPI 学习之路(二十二)依赖项第1张

 FastAPI 学习之路(二十二)依赖项第2张

     

    依赖项函数的形式和结构与路径操作函数一样。

因此,可以把依赖项当作没有「装饰器」(即,没有 @app.get("/path") )的路径操作函数。

依赖项可以返回各种内容。

本例中的依赖项预期接收如下参数:

  • 类型为 str 的可选查询参数 q

  • 类型为 int 的可选查询参数 skip,默认值是 0

  • 类型为 int 的可选查询参数 limit,默认值是 100

然后,依赖项函数返回包含这些值的 dict

    

    接收到新的请求时,FastAPI 执行如下操作:

  • 用正确的参数调用依赖项函数(「可依赖项」)

  • 获取函数返回的结果

  • 把函数返回的结果赋值给路径操作函数的参数   

FastAPI 兼容性

依赖注入系统如此简洁的特性,让 FastAPI 可以与下列系统兼容:

  • 关系型数据库

  • NoSQL 数据库

  • 外部支持库

  • 外部 API

  • 认证和鉴权系统

  • API 使用监控系统

  • 响应数据注入系统 

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

FastAPI 学习之路(二十二)依赖项第3张

免责声明:文章转载自《FastAPI 学习之路(二十二)依赖项》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇urllib的使用ubuntu 常用 apt更新命令下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

怎样将shp文件的坐标点导出来?

单击以选择保存类型中的文本文件,将经度和纬度输出为txt格式。坐标系统有两个选项。第一个是数据源的坐标系。数据的数据源坐标系为UTM,投影坐标系,单位为米。第二个是我开始设置的数据帧的坐标系,即WGS84,单位为度。。。。直接将获得的点的坐标生成到文本文件中。如果它是栅格文件,则来自rastrastertopint的arctoolboxconverttool...

【资料】2021年最网红的FPGA开发板之一——DE10-Nano (SOC FPGA入门推荐!)

DE10 Nano开发板是2021最受欢迎的FPGA开发板之一。除了广泛应用于物联网、边缘计算、硬件加速、AI和EDA教育课程之外,许多爱好者还在网络上日益流行的开源复古游戏项目Mister中使用它。让我们来看看DE10 Nano提供的材料:Youjing官方网站上的材料(中文手册可用!!!23~课程培训材料2018产学合作培训材料基于2018产学协作培训材...

TabWidget修改tab颜色,自定义样式

您可以通过tabWidget-˃setStyleSheet方法设置样式,包括选项卡样式。...

Delete from join 用法

delete(别名)fromtblA(别名)leftjointblb(别名)on。。。...

oracle触发器调试

如果触发器执行成功,不会出现第4个图,不成功,会出现数据调试信息,具体报错位置会定位到。F7单步执行4.出错时,会出现调试数据,双击调试数据,可以复制出来...

(转)JavaScript-性能优化之函数节流(throttle)与函数去抖(debounce)

简单来说,JavaScript性能优化的函数节流和函数去抖动功能节流就是使函数在极短的时间间隔内无法连续调用。下一个函数调用只能在上次函数执行超过指定的时间间隔后进行。对于这两个需求,有两种解决方案:去抖动和节流。Throwle和debouck是解决请求和响应速度不匹配问题的两种解决方案。抛出以相等的间隔执行函数。如果事件在反跳时间间隔t内再次触发,则将再次...