FastAPI 学习之路(二十三)用类作为依赖的注入

简介: FastAPI 学习之路(二十三)用类作为依赖的注入

我们先看一个简单的demo。

from typing import Optional
from fastapi import Depends, FastAPI
app = FastAPI()
fake_items_db = [{"city": "beijing"}, {"city": "shanghai"},
                 {"city": "heze"}]
class CommonQueryParams:
    def __init__(self, desc: Optional[str] = None, skip: int = 0, limit: int = 100):
        self.desc = desc
        self.skip = skip
        self.limit = limit
@app.get("/items/")
def read_items(commons: CommonQueryParams = Depends(CommonQueryParams)):
    response = {}
    if commons.desc:
        response.update({"desc": commons.desc})
    items = fake_items_db[commons.skip : commons.skip + commons.limit]
    response.update({"items": items})
    return response


我们去实现了一个类,然后这个类呢,初始化方法方法,我们有介绍,跳过,限制等条件呢,我们在实现接口的时候,去注入下这个类,我们看下结果;


image.png


那么我们看下,我们当增加下,我们注入的类里面需要的参数的时候,看下接口返回的


image.png


image.png


      其实用类实现也没有那么难,有固定的格式。


       我们只需要按照这个格式去实现即可。


       我们有两种写法


1.commons: CommonQueryParams = Depends(CommonQueryParams)
2.commons: CommonQueryParams = Depends()


实现的效果都是一样的。


           方法二的写法更加简单,我们去看下接口文档如何展示的。


image.png


正常也会带着这些选填的参数。


我们之前文章有分享过选填必填的参数,我们现在的是否也可以使用呢,我们可以看下,我们必须在依赖注入的时候,必须需要参数desc,我们看下是否可以。


from fastapi import Depends, FastAPI
app = FastAPI()
fake_items_db = [{"city": "beijing"}, {"city": "shanghai"},
                 {"city": "heze"}]
class CommonQueryParams:
    def __init__(self, desc: str , skip: int = 0, limit: int = 100):
        self.desc = desc
        self.skip = skip
        self.limit = limit
@app.get("/items/")
def read_items(commons: CommonQueryParams = Depends()):
    response = {}
    if commons.desc:
        response.update({"desc": commons.desc})
    items = fake_items_db[commons.skip : commons.skip + commons.limit]
    response.update({"items": items})
    return response


    我们看下,我们不填写的时候,是否是给我们返回的异常,我们预期是接口返回异常


image.png


正常填写


image.png


可以正常返回。那么我们用python的类去实现依赖,其实也是很简单的。之前的一些方法都是可以正常的放在类里面去实现的。



相关文章
|
Python
FastAPI(35)- 依赖项中使用 yield + Context Manager 上下文管理器
FastAPI(35)- 依赖项中使用 yield + Context Manager 上下文管理器
261 0
FastAPI(33)- Global Dependencies 全局依赖
FastAPI(33)- Global Dependencies 全局依赖
299 0
FastAPI(33)- Global Dependencies 全局依赖
FastAPI(32)- Dependencies in path operation 通过路径操作装饰器的 dependencies 参数声明依赖
FastAPI(32)- Dependencies in path operation 通过路径操作装饰器的 dependencies 参数声明依赖
141 0
FastAPI(32)- Dependencies in path operation 通过路径操作装饰器的 dependencies 参数声明依赖
|
缓存 API
FastAPI(31)- Sub-dependencies 子依赖
FastAPI(31)- Sub-dependencies 子依赖
120 0
FastAPI(31)- Sub-dependencies 子依赖
|
IDE API 开发工具
FastAPI(30)- Classes as Dependencies 类依赖注入 (下)
FastAPI(30)- Classes as Dependencies 类依赖注入 (下)
114 0
FastAPI(30)- Classes as Dependencies 类依赖注入 (下)
|
IDE API 开发工具
FastAPI(30)- Classes as Dependencies 类依赖注入 (上)
FastAPI(30)- Classes as Dependencies 类依赖注入 (上)
219 0
FastAPI(30)- Classes as Dependencies 类依赖注入 (上)
|
NoSQL 测试技术 Redis
FastAPI(八十四)实战开发《在线课程学习系统》--接口测试(下)
FastAPI(八十四)实战开发《在线课程学习系统》--接口测试(下)
FastAPI(八十四)实战开发《在线课程学习系统》--接口测试(下)
|
测试技术 数据安全/隐私保护
FastAPI(八十四)实战开发《在线课程学习系统》--接口测试(上)
FastAPI(八十四)实战开发《在线课程学习系统》--接口测试(上)
|
存储 测试技术 数据安全/隐私保护
FastAPI(八十三)实战开发《在线课程学习系统》--注册接口单元测试
FastAPI(八十三)实战开发《在线课程学习系统》--注册接口单元测试
FastAPI(八十三)实战开发《在线课程学习系统》--注册接口单元测试
FastAPI(八十二)实战开发《在线课程学习系统》接口开发-- 课程上架下架
FastAPI(八十二)实战开发《在线课程学习系统》接口开发-- 课程上架下架