前言

  • form-data 表单格式的请求数据其实也是挺常见的
  • FastAPI 通过 Form 来声明参数需要接收表单数据

 

安装 python-multipart

要用 Form,需要先安装这个库



pip install python-multipart


 

Form

Form 是继承自 Body,所以可以定义和 Body 相同的元数据以及额外的验证

FastAPI(23)- 详解 Form,发送表单数据_表单

 

简单的栗子



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 

 

正确传参的请求结果

FastAPI(23)- 详解 Form,发送表单数据_FastAPI_02

 

请求头

FastAPI(23)- 详解 Form,发送表单数据_表单_03

 

查看 Swagger API 文档

FastAPI(23)- 详解 Form,发送表单数据_ico_04

  • 可以看到接口文档中,接口的 Content-type 默认也是 application/x-www-form-urlencoded 
  • 注意:在 Swagger 上无法测试上传文件,因为 Content-type 无法切换到  multipart/form-data ,如果需要测试,要用 FastAPI 提供的 File 哦