FastAPI开发文档教程-表单数据

admin 2026-01-10 10:53:53 编程 来源:ZONE.CI 全球网 0 阅读模式
  • 导入 Form
  • 定义 Form 参数
  • 关于 “表单字段”
  • 小结

    接收的不是 JSON,而是表单字段时,要使用 Form

    要使用表单,需预先安装 python-multipart

    例如,pip install python-multipart

    导入 Form

    fastapi 导入 Form

    1. from fastapi import FastAPI, Form
    2. app = FastAPI()
    3. @app.post("/login/")
    4. async def login(username: str = Form(), password: str = Form()):
    5. return {"username": username}

    定义 Form 参数

    创建表单(Form)参数的方式与 BodyQuery 一样:

    1. from fastapi import FastAPI, Form
    2. app = FastAPI()
    3. @app.post("/login/")
    4. async def login(username: str = Form(), password: str = Form()):
    5. return {"username": username}

    例如,OAuth2 规范的 “密码流” 模式规定要通过表单字段发送 usernamepassword

    该规范要求字段必须命名为 usernamepassword,并通过表单字段发送,不能用 JSON。

    使用 Form 可以声明与 Body (及 QueryPathCookie)相同的元数据和验证。

    说明

    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 声明表单数据输入参数。

    FastAPI开发文档教程-表单数据 编程

    FastAPI开发文档教程-表单数据

    导入 Form定义 Form 参数关于 “表单字段”小结接收的不是 JSON,而是表单字段时,要使用 Form。要使用表单,需预先安装 python-multipart。例如,pip install
    评论:0   参与:  0