FastAPI之表单数据

FastAPI 表单数据处理教程

FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,它用 Python 3.6+类型提示的特性旨在方便和快速地设计和构建 APIs,并且减少代码的冗余与错误。下面将介绍如何在 FastAPI 中处理表单数据。

安装 FastAPI 和 Uvicorn

首先,确保你已经安装了FastAPI和Uvicorn,它们将允许我们运行我们的Web应用。在命令行中运行以下命令来安装这些包(如果你尚未安装):

pip install fastapi
pip install uvicorn

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

pip install python-multipart

创建 FastAPI 应用

创建一个新的 Python 文件,如 main.py,并导入需要的模块:

from fastapi import FastAPI, Form
from pydantic import BaseModel
from typing import Optional

app = FastAPI()

创建表单数据模型

虽然处理表单时通常不需要Pydantic模型,但定义它可以让我们更便捷地进行验证和文档化。

class Item(BaseModel):
    name: str
    description: Optional[str] = None
    price: float
    tax: Optional[float] = None

创建 POST 路由处理表单提交

在FastAPI中创建一个接受表单数据的路由。我们将使用Form类来定义应该从表单中接收哪些字段。

@app.post("/items/")
async def create_item(name: str = Form(...), description: str = Form(None), 
                      price: float = Form(...), tax: Optional[float] = Form(None)):
    item = {"name": name, "description": description, "price": price, "tax": tax}
    return item

在上面的例子中, ... 表明该字段是必填的,而 None 则意味着该字段是可选的。

运行应用

现在,你可以通过 Uvicorn 来运行你的应用。在命令行中运行以下命令:

uvicorn main:app --reload

--reload 参数使得在代码更新时服务器能够自动重新加载。

测试应用

打开浏览器,访问 http://127.0.0.1:8000/docs ,你将看到由 FastAPI 自动生成的交互式API文档。

在文档页面上,你能看到你创建的 /items/ 路由。你可以使用“Try it out”功能来发送一个表单数据请求,填写相应字段并执行。
在这里插入图片描述

总结

在这份教程中,我们学会了如何在 FastAPI 中通过创建简单的路由处理表单数据。你可以使用Form帮助表单验证和自动生成文档。通过结合 FastAPI 自动生成的文档,可以方便地测试和交互你的 API。

希望你能在构建自己的 FastAPI 应用时找到这份教程有用。快去试试吧!

### 如何在 FastAPI 中获取 POST 请求数据FastAPI 应用程序中处理 `POST` 请求并提取传入的数据是一个常见的需求。为了实现这一点,可以利用 Pydantic 模型定义请求体结构,并通过路径操作函数接收这些模型作为参数。 #### 使用 Pydantic 定义请求体 首先创建一个继承自 `BaseModel` 的类来描述预期接收到的数据格式: ```python from pydantic import BaseModel class Item(BaseModel): name: str description: str | None = None price: float tax: float | None = None ``` 上述代码片段展示了如何定义名为 `Item` 的模型,它包含了四个字段:`name`, 可选的 `description`, `price` 和可选的 `tax`. #### 创建路径操作函数 接着,在应用程序实例上注册一个新的端点以接受带有 JSON 负载的 `POST` 请求: ```python from fastapi import FastAPI, Form from typing import Optional app = FastAPI() @app.post("/items/") async def create_item(item: Item): return item.dict() ``` 这段代码设置了一个新的路由 `/items/` ,该路由期望客户端发送符合之前定义好的 `Item` 结构的对象。当有匹配类型的对象被成功解析后,则会返回这个对象本身转换成字典形式的结果给调用者[^2]. 如果想要支持表单编码(`application/x-www-form-urlencoded`) 或多部分表单 (`multipart/form-data`) 数据提交方式的话,应该采用如下方法签名: ```python @app.post("/form-item/") async def form_create_item( name: str = Form(...), description: Optional[str] = Form(None), price: float = Form(...), tax: Optional[float] = Form(None)): return { "name": name, "description": description, "price": price, "tax": tax } ``` 这里使用了 `Form()` 函数指定了每个参数是从表单字段中读取而来而不是 JSON 主体内。注意这里的省略号表示这是一个必填项[^1].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

micro_cloud_fly

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值