FastAPI 中如何处理表单数据?

推荐答案

在 FastAPI 中处理表单数据可以通过 Form 类来实现。首先需要从 fastapi 导入 Form,然后在路由处理函数中定义参数并使用 Form(...) 来声明表单字段。以下是一个简单的示例:

在这个示例中,usernamepassword 是从表单中提取的两个字段。Form(...) 表示这些字段是必填的。

本题详细解读

1. 导入 Form

要处理表单数据,首先需要从 fastapi 导入 Form 类:

2. 定义路由处理函数

在路由处理函数中,使用 Form(...) 来声明表单字段。Form(...) 中的 ... 表示该字段是必填的。如果字段是可选的,可以使用 Form(None)Form(default_value)

3. 表单数据的处理

FastAPI 会自动解析请求体中的表单数据,并将其转换为 Python 类型。在上面的示例中,usernamepassword 是从表单中提取的字符串。

4. 表单数据的验证

FastAPI 会自动验证表单数据的类型和必填性。如果表单数据不符合要求,FastAPI 会返回一个 422 Unprocessable Entity 错误,并附带详细的错误信息。

5. 处理文件上传

如果需要处理文件上传,可以使用 FileUploadFile 类。例如:

在这个示例中,file 是一个上传的文件对象,可以通过 file.filename 获取文件名。

6. 表单数据的嵌套

FastAPI 还支持处理嵌套的表单数据。例如,可以使用 Pydantic 模型来定义复杂的表单结构:

-- -------------------- ---- -------
---- -------- ------ ---------

----- ---------------------
    --------- ---
    --------- ---

--------------------
----- --- ----------- --------- - -----------
    ------ ------------ --------------

在这个示例中,UserLogin 是一个 Pydantic 模型,用于定义表单数据的结构。FastAPI 会自动将表单数据解析为该模型。

7. 表单数据的编码

FastAPI 默认使用 application/x-www-form-urlencoded 编码来处理表单数据。如果需要处理 multipart/form-data 编码的表单数据(例如文件上传),可以使用 FileUploadFile 类。

8. 表单数据的限制

FastAPI 允许对表单数据进行限制,例如最小长度、最大长度、正则表达式等。这些限制可以通过 Pydantic 模型或直接在 Form 中使用参数来实现。

在这个示例中,username 的长度必须在 3 到 50 之间,password 的长度必须至少为 8。

纠错
反馈