Files
fastapi/docs/zh-hant/docs/tutorial/request-forms.md
Sebastián Ramírez fe98ea307a 🌐 Update translations for zh-hant (update-outdated) (#15178)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Yurii Motov <yurii.motov.monte@gmail.com>
2026-03-20 18:05:38 +01:00

2.5 KiB
Raw Blame History

表單資料

當你需要接收表單欄位而不是 JSON 時,可以使用 Form

/// info

要使用表單,請先安裝 python-multipart

請先建立並啟用一個虛擬環境,然後再安裝,例如:

$ pip install python-multipart

///

匯入 Form

fastapi 匯入 Form

{* ../../docs_src/request_forms/tutorial001_an_py310.py hl[3] *}

定義 Form 參數

以與 BodyQuery 相同的方式建立表單參數:

{* ../../docs_src/request_forms/tutorial001_an_py310.py hl[9] *}

例如,在 OAuth2 規範的一種用法稱為「password flow」必須以表單欄位傳送 usernamepassword

規範 要求欄位名稱必須正好是 usernamepassword,而且必須以表單欄位傳送,而不是 JSON。

使用 Form 時,你可以宣告與 Body(以及 QueryPathCookie)相同的設定,包括驗證、範例、別名(例如用 user-name 取代 username)等。

/// info

Form 是一個直接繼承自 Body 的類別。

///

/// tip

要宣告表單的請求本文,你需要明確使用 Form否則這些參數會被解讀為查詢參數或請求本文JSON參數。

///

關於「表單欄位」

HTML 表單(<form></form>)向伺服器傳送資料時,通常會使用一種「特殊」的編碼方式,與 JSON 不同。

FastAPI 會從正確的位置讀取那些資料,而不是從 JSON。

/// note | 技術細節

表單資料通常會使用「媒體類型」application/x-www-form-urlencoded 進行編碼。

但當表單包含檔案時,會使用 multipart/form-data。你會在下一章閱讀如何處理檔案。

若想進一步了解這些編碼與表單欄位,請參考 MDN web docs 的 POST

///

/// warning

你可以在一個 路徑操作path operation 中宣告多個 Form 參數,但不能同時再宣告期望以 JSON 接收的 Body 欄位,因為該請求的本文會使用 application/x-www-form-urlencoded 編碼,而不是 application/json

這不是 FastAPI 的限制,而是 HTTP 協定本身的規定。

///

回顧

使用 Form 來宣告表單資料的輸入參數。