FastAPI之嵌套模型

请求体 - 嵌套模型

使用 FastAPI,你可以很随意的实现模型的嵌套、定义、校验、记录文档,并使用任意深度嵌套的模型,这其实都是FastAPI的核心模块P一单提成进行做的。。

List 字段

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()


class Item(BaseModel):
    name: str
    description: str | None = None
    price: float
    tax: float | None = None
    tags: list = []


@app.put("/items/{item_id}")
async def update_item(item_id: int, item: Item):
    results = {"item_id": item_id, "item": item}
    return results


我们来看下效果
在这里插入图片描述

在这里插入图片描述

现在tags,可以随便填写任意类型的数据,如果我们规定只能填写字符串,只需要稍微改变一下代码

tags: List[str] = []

现在来看下效果
在这里插入图片描述

Set 类型

set 类型与list的区别我们都知道,就是数据不能重复。改起来也是相当的容易,直接把List换成Set即可

tags: set[str] = set()

这样,即使你收到带有重复数据的请求,这些数据也会被转换为一组唯一项。

而且,每当你输出该数据时,即使源数据有重复,它们也将作为一组唯一项输出。

嵌套模型

直接来看一个深度较大的嵌套代码示例吧

from typing import Union

from fastapi import FastAPI
from pydantic import BaseModel, HttpUrl

app = FastAPI()


class Team(BaseModel):
    # 球队名称
    name: str
    # 所属区域:东部、西部
    area: str


class Player(BaseModel):
    # 所属球队
    team: Team
    # 球员名称
    name: str


class Hobby(BaseModel):
    name: str
    description: Union[str, None] = None
    # 分类
    category: str
    tax: Union[float, None] = None
    # 喜欢的球队名称
    teams: set[str] = set()
    # 喜欢的球员
    players: Union[list[Player], None] = None


class Fan(BaseModel):
    """
    球迷
    """
    # 球迷姓名
    name: str
    description: Union[str, None] = None
    # 年龄
    age: int
    # 爱好
    hobby: list[Hobby]


@app.post("/fan/")
async def create_fan(fan: Fan):
    return fan

看看效果
在这里插入图片描述

纯列表请求体

官网的示例代码

from fastapi import FastAPI
from pydantic import BaseModel, HttpUrl

app = FastAPI()


class Image(BaseModel):
    url: HttpUrl
    name: str


@app.post("/images/multiple/")
async def create_multiple_images(images: list[Image]):
    return images

在这里插入图片描述

总结

总结一下,FastAPI通过利用Python类型提示和Pydantic库的强大功能,使得处理嵌套模型变得简单易用。只需要定义好你的数据模型,FastAPI就能自动处理请求体的解析和验证,大大提高了开发效率。而实际上,在工作中 ,用到这种写法并不多。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

micro_cloud_fly

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值