FastAPI 教程:处理表单数据请求
什么是表单数据
在Web开发中,表单数据(Form Data)是一种常见的客户端向服务器发送数据的方式。与JSON数据不同,表单数据通常来自HTML表单提交,采用特殊的编码格式。FastAPI提供了Form
类来专门处理这类请求。
准备工作
要处理表单数据,首先需要安装python-multipart
库:
pip install python-multipart
这个库是FastAPI处理表单数据(特别是包含文件上传的多部分表单)所必需的依赖。
导入Form类
在FastAPI中处理表单数据,首先需要从fastapi导入Form:
from fastapi import FastAPI, Form
定义表单参数
定义表单参数的方式与定义查询参数(Query)或请求体(Body)参数类似:
@app.post("/login/")
async def login(username: str = Form(...), password: str = Form(...)):
return {"username": username}
这里我们定义了一个登录接口,接收username和password两个表单字段。
表单数据的实际应用
表单数据在Web开发中有许多标准应用场景,例如:
- OAuth2密码授权流程要求客户端以表单形式发送username和password
- 传统的HTML表单提交
- 文件上传(需要结合File类使用)
表单参数的高级配置
与Query、Path等类似,Form也支持各种参数配置:
@app.post("/login/")
async def login(
username: str = Form(..., min_length=3, max_length=20, example="user123"),
password: str = Form(..., min_length=8, regex="[A-Za-z0-9@#$%^&+=]+")
):
return {"username": username}
可以配置验证规则、示例值、别名等。
技术细节
表单数据通常使用两种媒体类型编码:
application/x-www-form-urlencoded
:用于普通表单数据multipart/form-data
:用于包含文件上传的表单
FastAPI会自动识别并正确处理这两种编码格式。
注意事项
- 必须显式使用Form声明表单参数,否则会被解释为查询参数或JSON体参数
- 不能在同一个请求中同时接收表单数据和JSON体数据,这是HTTP协议的限制
- 对于文件上传,需要结合File类使用(将在后续章节介绍)
总结
FastAPI通过Form类提供了强大的表单数据处理能力,开发者可以轻松处理各种表单提交场景,同时保持类型安全和数据验证。理解表单数据的特性和限制,能够帮助开发者构建更健壮的Web API。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考