fastapi教程翻译(十六):Form Data(表格数据)
2019-10-16 本文已影响0人
warmsirius
一、Form
字段
当您需要接收表单字段而不是JSON时,可以使用Form
。
提示
想要使用forms,首先请安装
python-multipart
.`pip install python-multipart`.
二、导入Forn
: Import Form
首先,从 fastapi
中导入Form
:
from fastapi import FastAPI, Form
三、定义Form
参数
创建Form
参数,和之前创建 Body
和 Query
参数的方法一样:
from fastapi import FastAPI, Form
app = FastAPI()
@app.post("/login/")
async def login(*,
username: str = Form(...),
password: str = Form(...)
):
return {"username": username}
例如,以一种可以使用OAuth2
规范的方式(称为“密码流”),要求发送“用户名”和“密码”作为表单字段。
规范要求这些字段必须准确命名为"用户名''和"密码'',并作为表单字段而不是`JSON发送。
使用Form可以声明与Body相同的元数据和验证(以及Query,Path,Cookie)。
说明
Form
是一个类,直接继承自Body
- 要声明表单主体,您需要明确地使用
Form
,因为没有它,参数将被解释为查询参数或主体(JSON)参数。
二、Form
字段
HTML表单(<form> </ form>
)将数据发送到服务器的方式通常对该数据使用“特殊”编码,这与JSON不同。
FastAPI 将确保从正确的位置而不是JSON读取数据。
技术细节
- 表单中的数据通常使用“媒体类型”
application/x-www-form-urlencoded
编码。 - 但是当表单包含文件时,它将被编码为
multipart/form-data
。 您将在下一章中了解有关处理文件的信息。
如果您想了解有关这些编码和表单字段的更多信息,请转至 the MDN web docs for POST
.
警告⚠️
您可以在路径操作中声明多个
Form
参数,但是不能声明希望以JSON
形式接收的Body
字段,因为请求将使用application/x-www-form-
而不是application/json的urlencoded
。这不是FastAPI的限制,而是HTTP协议的一部分。