前言

  • 前面讲了 Query、Path、Body,均可以对某个字段进行额外的校验和添加元数据
  • 这一篇来讲 Fields,它针对 Pydantic Model 内部字段进行额外的校验和添加元数据

 

Fields

  • 它是 Pydantic 提供的方法,并不是 FastAPi 提供的哦
  • 该方法返回了一个实例对象,是 Pydantic 中 FieldInfo 类的实例对象

FastAPI(13)- 详解 Fields,针对 Pydantic Model 内部字段添加额外校验和元数据_校验和

 

重点

FastAPI 提供的 Query、Path等其他公共 Param 类和 Body 类,都是 Pydantic 的 FieldInfo 类的子类

FastAPI(13)- 详解 Fields,针对 Pydantic Model 内部字段添加额外校验和元数据_字段_02

FastAPI(13)- 详解 Fields,针对 Pydantic Model 内部字段添加额外校验和元数据_元数据_03

FastAPI(13)- 详解 Fields,针对 Pydantic Model 内部字段添加额外校验和元数据_元数据_04

Query、Path 继承 Param,Param 继承 FieldInfo

 

FastAPI(13)- 详解 Fields,针对 Pydantic Model 内部字段添加额外校验和元数据_ico_05 

Body 直接继承 FieldInfo

 

简单的栗子



from typing import Optional

import uvicorn
from fastapi import FastAPI, Body
from pydantic import Field, BaseModel

app = FastAPI()


class Item(BaseModel):
name: str
description: Optional[str] = Field(
default=None,
title="标题",
description="描述",
max_length=5
)
price: float = Field(..., gt=0, description="需要大于0")
tax: Optional[float] = None


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


if __name__ == "__main__":
uvicorn.run(app="11_fields:app", host="127.0.0.1", port=8080, reload=True, debug=True)


 

正确传参的请求结果 

FastAPI(13)- 详解 Fields,针对 Pydantic Model 内部字段添加额外校验和元数据_FastAPI_06

 

校验失败的请求结果

FastAPI(13)- 详解 Fields,针对 Pydantic Model 内部字段添加额外校验和元数据_FastAPI_07

 

查看 Swagger API 文档 

FastAPI(13)- 详解 Fields,针对 Pydantic Model 内部字段添加额外校验和元数据_FastAPI_08

JSON Schema 对加了 Fields 的字段会有详细的描述