FastAPI 如何创建一个能够接受表单或 JSON 请求体的端点
在本文中,我们将介绍如何使用 FastAPI 创建一个端点,该端点能够接受来自表单或 JSON 请求体的数据。FastAPI 是一个基于 Python 的现代、快速(高性能)的 Web 框架,具有自动交互式文档(使用 Swagger UI 和 ReDoc),并且易于使用。
阅读更多:FastAPI 教程
使用 FastAPI 创建端点
首先,我们需要导入所需的模块和类,用于创建 FastAPI 应用和处理请求的端点。我们还需要使用 Pydantic 模块来定义请求体模型。
from fastapi import FastAPI, Form, Request
from pydantic import BaseModel
然后,我们可以创建 FastAPI 应用实例:
app = FastAPI()
接下来,我们需要定义一个请求体模型,用于验证和解析请求体数据。我们可以使用 Pydantic 中的 BaseModel 类来创建自定义模型。在本例中,我们将创建一个包含表单和 JSON 数据的请求体模型。
class Item(BaseModel):
name: str
price: float
然后,我们可以使用 @app.post
装饰器和 async def
语法来定义我们的端点。在函数参数中,我们可以使用 Form
类型注解来指示 FastAPI 使用表单数据。
@app.post("/items/")
async def create_item(item: Item, request: Request, form_data: dict = Form(...)):
# 处理表单数据
item_data = {"name": item.name, "price": item.price, "from_form": form_data}
# 处理 JSON 数据
json_data = await request.json()
item_data["from_json"] = json_data
return item_data
在这个例子中,我们定义了一个名为 create_item
的端点,它接受一个名为 item
的请求体模型对象、一个名为 request
的请求对象和一个名为 form_data
的表单数据对象。
在函数体内,我们可以分别处理表单数据和 JSON 数据。我们可以将表单数据存储在一个字典中,并将其作为请求体模型对象的一部分返回。我们还可以使用 await request.json()
方法来获取并处理 JSON 数据,然后将其存储在同一字典中。
返回的字典包含了来自表单和 JSON 数据的信息,因此客户端可以根据需要选择使用哪种数据格式。
测试端点
现在我们可以使用 FastAPI 自带的交互式文档来测试我们的端点。启动 FastAPI 应用,并访问 http://localhost:8000/docs
或 http://localhost:8000/redoc
来打开交互式文档页面。
在文档页面上,可以找到我们之前创建的 /items/
端点。可以使用表单和 JSON 数据进行测试。
总结
本文介绍了如何使用 FastAPI 创建一个能够接受表单或 JSON 请求体的端点。我们学习了导入所需的模块和类,创建 FastAPI 应用实例,定义请求体模型,以及编写处理请求的端点函数。我们还了解了如何使用 FastAPI 的交互式文档来测试我们的端点。
FastAPI 是一个功能强大且易于使用的 Web 框架,它具有高性能和自动化文档生成等优点,适用于构建 Web API 和其他 Web 应用程序。无论是处理表单数据还是 JSON 数据,FastAPI 都提供了灵活且高效的解决方案,让开发者能够轻松创建强大的端点。