Form Data


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”)中,需要使用 usernamepassword 作为表单字段,规范要求字段必须准确命名为 usernamepassword,并且以表单的形式发送,而不是 JSON
    • Form 可以和 BodyQuery 等一样声明元信息和验证参数

注: 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 协议的一部分

文章作者: qiufeng
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 qiufeng !
评论
 上一篇
Request Files Request Files
Request Files可以使用 File 定义从客户端上传的文件 注:为了接受上传的文件,需要借助 python-multipart,这是由于文件是以表单数据的形式上传的 例子from fastapi import FastAPI, F
2020-04-18
下一篇 
Response Status Code Response Status Code
Response Status Code和声明返回模型一样,可以在装饰器函数中用 status_code 参数声明 HTTP 状态码,例如 from fastapi import FastAPI app = FastAPI() @ap
2020-04-17
  目录