W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
接收的不是 JSON,而是表單字段時,要使用 Form。
說明
要使用表單,需預先安裝 python-multipart。
例如,pip install python-multipart。
從 fastapi 導入 Form:
from fastapi import FastAPI, Form
app = FastAPI()
@app.post("/login/")
async def login(username: str = Form(...), password: str = Form(...)):
return {"username": username}
創(chuàng)建表單(Form)參數(shù)的方式與 Body 和 Query 一樣:
from fastapi import FastAPI, Form
app = FastAPI()
@app.post("/login/")
async def login(username: str = Form(...), password: str = Form(...)):
return {"username": username}
例如,OAuth2 規(guī)范的 "密碼流" 模式規(guī)定要通過表單字段發(fā)送 username 和 password。
該規(guī)范要求字段必須命名為 username 和 password,并通過表單字段發(fā)送,不能用 JSON。
使用 Form 可以聲明與 Body (及 Query、Path、Cookie)相同的元數(shù)據(jù)和驗證。
說明
Form 是直接繼承自 Body 的類。
提示
聲明表單體要顯式使用 Form ,否則,F(xiàn)astAPI 會把該參數(shù)當作查詢參數(shù)或請求體(JSON)參數(shù)。
與 JSON 不同,HTML 表單(<form></form>)向服務器發(fā)送數(shù)據(jù)通常使用「特殊」的編碼。
FastAPI 要確保從正確的位置讀取數(shù)據(jù),而不是讀取 JSON。
技術細節(jié)
表單數(shù)據(jù)的「媒體類型」編碼一般為 application/x-www-form-urlencoded。
但包含文件的表單編碼為 multipart/form-data。文件處理詳見下節(jié)。
編碼和表單字段詳見 MDN Web 文檔的 POST小節(jié)。
警告
可在一個路徑操作中聲明多個 Form 參數(shù),但不能同時聲明要接收 JSON 的 Body 字段。因為此時請求體的編碼是 application/x-www-form-urlencoded,不是 application/json。
這不是 FastAPI 的問題,而是 HTTP 協(xié)議的規(guī)定。
本節(jié)介紹了如何使用 Form 聲明表單數(shù)據(jù)輸入?yún)?shù)。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: