查看 Swagger API 文档
请求结果
依赖类的 __int__ 方法有参数的类型是 Dict、List 的栗子
from typing import List, Dict, Any, Optional from fastapi import Depends from fastapi.encoders import jsonable_encoder # 依赖类 class DictListClass: def __init__(self, *, name: str, address: Optional[List[str]] = None, info: Optional[Dict[str, Any]] = None, ext: Optional[List[Dict[str, Any]]] = None ): self.name = name self.address = address self.info = info self.ext = ext # 实例方法 def test(self): self.info.update({"test_func": "调用方法添加的键值对"}) @app.get("/items3") async def read_items( # 用第一种推荐写法来声明依赖项 commons: DictListClass = Depends() ): # 打印下看看 commons 是什么 print(commons, type(commons)) # 调用实例方法 commons.test() commons = jsonable_encoder(commons) # 打印转换后的 commons 是什么 print(commons, type(commons)) return {"commons": commons}
查看 Swagger API 文档
正确传参的请求结果
请求后,查看控制台输出
<26_class_dependency.DictListClass object at 0x10d20ff40> <class'26_class_dependency.DictListClass'>
{'name': '小菠萝', 'address': ['广州', '深圳'], 'info': {'age': 24, 'test_func': '调用方法添加的键值对'}, 'ext': [{'sex': 'girl'}, {'phone': 135012121212}]} <class'dict'>
- 可以看到转换前,commons 就是一个 DictListClass 类实例对象
- jsonable_encoder 转换后的 commons 就是一个 dict(jsonable_encoder 真是强大)
用 commons: DictListClass = Depends() 声明依赖后的代码提示
不仅代码优雅简洁一点,而且仍然有 IDE 代码提示