Fastapi 简明教程

FastAPI - Nested Models

Pydantic 模型的每个特性都有一个类型。类型可以是内置的 Python 类型或模型本身。因此,可以声明嵌套的带有特定特性名称、类型和验证的 JSON“对象”。

Example

在下面的示例中,我们构造一个 Customer 模型,其中一个特性能作为 product 模型类。product 模型反过来具有 supplier 类的属性。

from typing import Tuple
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class supplier(BaseModel):
   supplierID:int
   supplierName:str
class product(BaseModel):
   productID:int
   prodname:str
   price:int
   supp:supplier
class customer(BaseModel):
   custID:int
   custname:str
   prod:Tuple[product]

下面的 POST 操作装饰器将 customer 模型的对象渲染为服务器响应。

@app.post('/invoice')
async def getInvoice(c1:customer):
   return c1

Swagger UI 页面显示了三个对应于三个 BaseModel 类别的模式。

nested1

Customer 模式在展开以显示所有节点时如下所示 −

nested2

"/invoice" 路由的一个示例响应应该是这样的 −

{
   "custID": 1,
   "custname": "Jay",
   "prod": [
      {
         "productID": 1,
         "prodname": "LAPTOP",
         "price": 40000,
         "supp": {
            "supplierID": 1,
            "supplierName": "Dell"
         }
      }
   ]
}