前言
- 前面講了 Query、Path、Body,均可以對某個字段進行額外的校驗和添加元數據
- 這一篇來講 Fields,它針對 Pydantic Model 內部字段進行額外的校驗和添加元數據
Fields
- 它是 Pydantic 提供的方法,並不是 FastAPi 提供的哦
- 該方法返回了一個實例對象,是 Pydantic 中 FieldInfo 類的實例對象
重點
FastAPI 提供的 Query、Path等其他公共 Param 類和 Body 類,都是 Pydantic 的 FieldInfo 類的子類
Query、Path 繼承 Param,Param 繼承 FieldInfo
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)
正確傳參的請求結果
校驗失敗的請求結果
查看 Swagger API 文檔
JSON Schema 對加了 Fields 的字段會有詳細的描述