FastApi-09-模型嵌套

简介: FastApi-09-模型嵌套

常用基础嵌套


使用 FastAPI,你可以定义、校验、记录文档并使用任意深度嵌套的模型(归功于 Pydantic)。


基础模型


class Item(BaseModel):
    name: str
    description: Optional[str] = None
    price: float
    tax: Optional[float] = None
    tags: list = []
复制代码


定义类型的字类型


假设我们需要制定一个字段 tags:list 的元素都为 str 类型,怎么做呢?


答案是:使用 typing 中的 List 类。(指定其他字类型亦是如此)


from typing import List
tags: List[str]
复制代码


如上,就定义了一个元素类型为 str 的列表。


嵌套模型


为了方便组合拆解,我们可以将某些模型对象单独声明,然后在其他模型中引用。


class Image(BaseModel):
    url: str
    name: str
class Item(BaseModel):
    name: str
    description: Optional[str] = None
    price: float
    tax: Optional[float] = None
    tags: Set[str] = []
    image: Optional[Image] = None
复制代码


如上,我们定义了一个 Image 模型,在 Item 模型中直接使用了。


在实际请求时,我们按照以下格式发送请求体即可。


{
    "name": "Foo",
    "description": "The pretender",
    "price": 42.0,
    "tax": 3.2,
    "tags": ["rock", "metal", "bar"],
    "image": {
        "url": "http://example.com/baz.jpg",
        "name": "The Foo live"
    }
}
复制代码


特殊类型


HttpUrl:由 pydantic 提供。


class Image(BaseModel):
    url: HttpUrl
    name: str
复制代码


以上的使用方式,FastApi 支持自动联想补全,数据转换,数据校验,文档自动生成等。


实践


基础类型


class Md1(BaseModel):
    name:str
    age:int
@app.post('/model/1')
async def m1(md:Md1):
    return {'msg':'model is ok!'}
复制代码


执行测试:


网络异常,图片无法展示
|


根据测试结果,我们可以知道:①FastApi 的模型检验功能很好用。② 当整数被双引号包裹,FastApi 可以根据其限定的类型自动转换。③ 对于数据结构检验有明确的提示。


嵌套类型


class Md1(BaseModel):
    name:str
    age:int
class Md2(BaseModel):
    city_info:str
    people_info:Md1
@app.post('/model/1')
async def m1(md:Md1):
    return {'msg':'model is ok!'}
@app.put('/model/2')
async def m2(md:Md2):
    return {'msg':'relation model cheking pass!'}
复制代码


执行测试:


网络异常,图片无法展示
|


根据以上测试结果,我们可以清晰的了解到 FastApi 借助 pydantic 实现的模型嵌套非常优雅。模型嵌套结合动态请求体,我们可以很方便的应对业务变化导致的数据模型变化。

感谢您的阅读,别忘了关注,点赞,评论,转发四连哟!

相关文章
|
6月前
|
JSON API 持续交付
逐步指南:使用FastAPI部署YOLO模型的步骤
逐步指南:使用FastAPI部署YOLO模型的步骤
|
3月前
|
机器学习/深度学习 JSON API
【Python奇迹】FastAPI框架大显神通:一键部署机器学习模型,让数据预测飞跃至Web舞台,震撼开启智能服务新纪元!
【8月更文挑战第16天】在数据驱动的时代,高效部署机器学习模型至关重要。FastAPI凭借其高性能与灵活性,成为搭建模型API的理想选择。本文详述了从环境准备、模型训练到使用FastAPI部署的全过程。首先,确保安装了Python及相关库(fastapi、uvicorn、scikit-learn)。接着,以线性回归为例,构建了一个预测房价的模型。通过定义FastAPI端点,实现了基于房屋大小预测价格的功能,并介绍了如何运行服务器及测试API。最终,用户可通过HTTP请求获取预测结果,极大地提升了模型的实用性和集成性。
232 1
|
JSON Kubernetes API
使用FastAPI部署Ultralytics YOLOv5模型
YOLO是You Only Look Once(你只看一次)的缩写,它具有识别图像中的物体的非凡能力,在日常应用中会经常被使用。所以在本文中,我们将介绍如何使用FastAPI的集成YOLOv5,这样我们可以将YOLOv5做为API对外提供服务。
283 5
|
JSON NoSQL API
全面拥抱 FastApi — 响应模型
全面拥抱 FastApi — 响应模型
|
机器学习/深度学习 Python
【Python】fastapi框架之Web部署机器学习模型
【Python】fastapi框架之Web部署机器学习模型
|
JSON API 数据库
FastAPI(19)- Response Model 响应模型 (下)
FastAPI(19)- Response Model 响应模型 (下)
334 0
FastAPI(19)- Response Model 响应模型 (下)
|
JSON API 数据库
FastAPI(19)- Response Model 响应模型 (上)
FastAPI(19)- Response Model 响应模型 (上)
321 0
FastAPI(19)- Response Model 响应模型 (上)
|
开发框架 JSON 数据安全/隐私保护
FastAPI 学习之路(十四)响应模型
FastAPI 学习之路(十四)响应模型
FastAPI 学习之路(十四)响应模型
|
开发框架
FastAPI 学习之路(十一)请求体 - 嵌套模型
FastAPI 学习之路(十一)请求体 - 嵌套模型
FastAPI 学习之路(十一)请求体 - 嵌套模型
|
JSON 数据库 数据安全/隐私保护
fastapi 响应模型 / 响应状态码 / 表单参数
fastapi 响应模型 / 响应状态码 / 表单参数
276 0
fastapi 响应模型 / 响应状态码 / 表单参数