這是我參與8月更文挑戰的第9天,活動詳情查看:8月更文挑戰python
使用 FastAPI
,你能夠定義、校驗、記錄文檔並使用任意深度嵌套的模型(歸功於 Pydantic
)。markdown
class Item(BaseModel):
name: str
description: Optional[str] = None
price: float
tax: Optional[float] = None
tags: list = []
複製代碼
假設咱們須要制定一個字段 tags:list
的元素都爲 str
類型,怎麼作呢?數據結構
答案是:使用 typing
中的 List
類。(指定其餘字類型亦是如此)app
from typing import List
tags: List[str]
複製代碼
如上,就定義了一個元素類型爲 str 的列表。async
爲了方便組合拆解,咱們能夠將某些模型對象單獨聲明,而後在其餘模型中引用。ide
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
模型中直接使用了。post
在實際請求時,咱們按照如下格式發送請求體便可。測試
{
"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
提供。ui
class Image(BaseModel):
url: HttpUrl
name: str
複製代碼
以上的使用方式,
FastApi
支持自動聯想補全,數據轉換,數據校驗,文檔自動生成等。lua
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
實現的模型嵌套很是優雅。模型嵌套結合動態請求體,咱們能夠很方便的應對業務變化致使的數據模型變化。
感謝您的閱讀,別忘了關注,點贊,評論,轉發四連喲!