FastAPI(23)- 詳解 Form,傳送表單資料
阿新 • • 發佈:2022-01-05
FastAPI(23)- 詳解 Form,傳送表單資料
前言
- form-data 表單格式的請求資料其實也是挺常見的
- FastAPI 通過 Form 來宣告引數需要接收表單資料
安裝 python-multipart
要用 Form,需要先安裝這個庫
pip install python-multipart
Form
Form 是繼承自 Body,所以可以定義和 Body 相同的元資料以及額外的驗證
簡單的栗子
import uvicorn
from fastapi import FastAPI, Form
app = FastAPI()
@app.post("/login/" )
async def login(username: str = Form(...), password: str = Form(...)):
return {"username": username, "password": password}
if __name__ == "__main__":
uvicorn.run(app="10_Form:app", host="127.0.0.1", port=8080, reload=True, debug=True)
在 OAuth2 規範的一種使用方式(密碼流)中,需要將使用者名稱、密碼作為表單欄位傳送,而不是 JSON【後面會詳解 OAuth2】
重點
- 請求傳送表單格式的資料,請求頭通常會包含Content-Type: application/x-www-form-urlencoded
- 如果需要傳送包含檔案的表單資料, 會變成Content-Type: multipart/form-data
正確傳參的請求結果
請求頭
檢視 Swagger API 文件
- 可以看到介面文件中,介面的 Content-type 預設也是application/x-www-form-urlencoded
- 注意:在 Swagger 上無法測試上傳檔案,因為 Content-type 無法切換到multipart/form-data,如果需要測試,要用 FastAPI 提供的 File 哦
- File 詳細教程