iT邦幫忙

0

Day 05 - 接收複雜資料:Request Body 與 Pydantic 模型初探

  • 分享至 

  • xImage
  •  

前面幾天處理的都是放在網址列上的資料(路徑與查詢參數)。但實務上,如果要新增一筆完整的資料,通常會將資料包裝成 JSON 格式,放在 Request Body 中傳遞,這樣不僅能傳遞複雜的結構,也比較安全。

這時就輪到 FastAPI 的核心好夥伴「Pydantic」上場了。我們透過繼承 Pydantic 的 BaseModel 來定義資料的綱要(Schema)。

請將 main.py 改寫成這樣:

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

class Item(BaseModel):
name: str
description: str | None = None
price: float
tax: float | None = None

@app.post("/items/")
def create_item(item: Item):
item_dict = item.model_dump()
if item.tax:
price_with_tax = item.price + item.tax
item_dict.update({"price_with_tax": price_with_tax})
return item_dict

在這段程式碼中,我們定義了 Item 模型,其中 name 和 price 是必填,description 和 tax 是選填。
當前端發送 POST 請求並附帶 JSON 時,FastAPI 會自動將 JSON 轉換為對應的 Python 型別,並驗證必填欄位。如果前端漏傳了 name 欄位,或者把 price 傳成字串 "一百",API 會自動擋下請求並回傳清楚的錯誤提示,這大幅降低了我們寫 if/else 來檢查資料格式的痛苦。


圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言