Form Data
当需要接受表单字段而不是 JSON 时,可以使用 Form
注:需要借助 python-multipart 来使用表单
使用步骤
from fastapi import FastAPI, Form
app = FastAPI()
@app.post("/login/")
async def login(*, username: str = Form(...), password: str = Form(...)):
    return {"username": username}
- 导入 
Form - 定义表单参数:和使用 
Body以及Query等的方法一样- 例如在一种 OAuth2 规范(“password flow”)中,需要使用 
username和password作为表单字段,规范要求字段必须准确命名为username和password,并且以表单的形式发送,而不是 JSON Form可以和Body,Query等一样声明元信息和验证参数
 - 例如在一种 OAuth2 规范(“password flow”)中,需要使用 
 
注: Form 是继承于 Body 的类
提示:必须用 Form 显示声明表单正文,如果没有显示声明,则会被解释为查询参数或者 body 参数
About “Form Fields”
与 JSON 不同,HTML 表单(<form></form>)发送通常采用特殊的编码方式发送数据到服务器 
FastAPI 将确保从正确的位置读取数据
技术细节:
- 来自表单的数据通常使用  “media type” 
application/x-www-form-urlencoded的方式进行编码 - 但是当表单包含文件的时候,则会以 
multipart/form-data的方式进行编码 - MDN
 
警告:
- 可以在路径操作中定义多个 
Form参数,但是不能以接受 JSON 的方式去接受表单数据,例如声明Body字段,因为请求的正文将会以application/x-www-form-urlencoded方式而不是application/json方式进行编码 - 这不是 FastAPI 的限制,而是 HTTP 协议的一部分