官网文档:表单数据 - FastAPI
表单数据¶
接收的不是 JSON,而是表单字段时,要使用 Form表单
。
from fastapi import FastAPI, Form
app = FastAPI()
@app.post("/login/")
async def login(username: str = Form(), password: str = Form()):
return {"username": username}
"说明"
要使用表单,需预先安装 python-multipart。
例如,
pip install python-multipart
。
导入 Form
¶
from fastapi import FastAPI, Form
定义 Form
参数¶
@app.post("/login/")
async def login(username: str = Form(), password: str = Form()):
return {"username": username}
例如,OAuth2 规范的 "密码流" 模式规定要通过表单字段发送 username
和 password
。
该规范要求字段必须命名为 username
和 password
,并通过表单字段发送,不能用 JSON。
使用 Form
可以声明与 Body
(及 Query
、Path
、Cookie
)相同的元数据和验证。
"说明"
Form
是直接继承自Body
的类。
"提示"
声明表单体要显式使用
Form
,否则,FastAPI 会把该参数当作查询参数或请求体(JSON)参数。
关于 "表单字段"¶
与 JSON 不同,HTML 表单(<form></form>
)向服务器发送数据通常使用「特殊」的编码。
FastAPI 要确保从正确的位置读取数据,而不是读取 JSON。
"技术细节"
表单数据的「媒体类型」编码一般为
application/x-www-form-urlencoded
。但包含文件的表单编码为
multipart/form-data
。文件处理详见下节。编码和表单字段详见 MDN Web 文档的 POST小节。
"警告"
可在一个路径操作中声明多个
Form
参数,但不能同时声明要接收 JSON 的Body
字段。因为此时请求体的编码是application/x-www-form-urlencoded
,不是application/json
。
这不是 FastAPI 的问题,而是 HTTP 协议的规定。
小结¶
本节介绍了如何使用 Form
声明表单数据输入参数。
表单模型
您可以使用Pydantic模型在FastAPI中声明表单字段。
资讯
要使用表单,请先安装python multipart。
确保您创建了一个虚拟环境,激活它,然后安装它,例如:$ pip install python-multipart
注:
标签:username,14,Form,FastAPI,表单,str,password From: https://blog.csdn.net/skywalk8163/article/details/143248450
自FastAPI 0.113.0版本起支持此功能。