前言
- 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 详细教程