FastAPI 官方文档解读 (二)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FastAPI 官方文档解读 (二)相关的知识,希望对你有一定的参考价值。
参考技术A之前我们提到过, Query 和 Path 可以进行字段验证,对长度和取值范围等进行限制。 Body 中的JSON字段也具有同样的验证,只不过需要声明在 Model 中,而不是参数中。
使用 Field() 可以很好地满足我们的需求。
tags: list = [] 表示普通的列表验证,如果我们想要统一的类型(像数组那样),我们可以使用 typing 的 List 来表示,例如 tags: List[str] = [] 。
你过你要求数据不重复,那么也可以试试 set ,用 typing 中的 Set 来表示 tags: Set[str] = set()
使用model作为另一个model中字段的类型也是可以的。并且这也将很常用。
pydantic 提供了一些定义好的特殊类型,方便对各种内容进行验证。
UrlStr 便是一种可以验证合法URL的预置类型
如果您希望Body中的JSON,最外层是一个列表。那么您需要在参数中像如下一样定义类型。
除了Model,您也可以使用dict来接收Body。
这种形式的类型标注,即可用字典来接收。当然JSON不支持int类型的key,不用担心,fastapi会自动转换。
def read_items(*, ads_id: str = Cookie(None)): 像这样声明,即可获取Cookie参数。第一个值为默认值。
def read_items(*, user_agent: str = Header(None)): 可以接收Header中的参数。如果Header的一个字段具有多个值,可以使用 def read_items(x_token: List[str] = Header(None)): 这种形式
关于这部分内容,请看前面关于fastapi源码的解读。
pydantic 的model提供了 .dict() 方法,可以将字段导出为字典。这样便实现模型之间的转换。例如:
这两个model之间的差别只有password,UserIn的定义需要如下形式
而UserOut使用 dict() 导出可能是如下形式
我们只需要 user_in = UserIn(**user_out.dict(), password="secret") 便可达到效果
反过来转换, UserIn 的dict中多余的参数,会被 UserOut 忽略掉。
Union[PlaneItem, CarItem] 使得response有更多的选择余地。像 response_model=List[Item] 也是被允许的
= Form(...) ,该类继承于 Body ,用法一致。
以上是关于FastAPI 官方文档解读 (二)的主要内容,如果未能解决你的问题,请参考以下文章
Spring 总览及 IOC 容器的使用 —— Spring 官方文档解读