在上一篇文章中,我们探讨了如何使用路径参数来处理请求。在本篇文章中,我们将深入了解如何处理请求体,尤其是如何定义和解析 request body
。请求体对于接收复杂数据(例如 JSON 文件、表单数据等)至关重要。我们将通过示例来说明如何在 FastAPI 中使用请求体。
什么是请求体?
请求体是 HTTP 请求中的一部分,通常用于向服务器发送数据。与路径参数和查询参数不同,请求体可以携带更复杂的数据结构,如 JSON 对象、XML 或表单字段。
在 FastAPI 中,我们通常使用 Pydantic
模型来定义请求体数据的结构,这不仅使得数据验证更加简单,而且提供了清晰的文档。
定义 Pydantic 模型
Pydantic
是一个数据验证和设置管理的库,它与 FastAPI 紧密集成。我们首先需要定义一个模型来描述我们的请求体。以下是一个示例模型:
1 | from pydantic import BaseModel |
在上面的例子中,Item
模型包括三个字段:id
(整数)、name
(字符串)和 price
(浮点数)。使用 Pydantic 后,FastAPI 可以为我们自动进行数据验证。
创建接收请求体的路由
接下来,我们将在 FastAPI 应用中创建一个路由,以接收该模型作为请求体。以下是实现此功能的代码示例:
1 | from fastapi import FastAPI |
在此代码中,使用了 @app.post("/items/")
装饰器来定义一个新的 POST 路由。参数 item: Item
是该路由的请求体类型,FastAPI 会自动解析请求体并将其转换为 Item
类型。
测试请求体
我们可以使用 curl
或 Postman 等工具来测试此接口。以下是使用 curl
测试的示例命令:
1 | curl -X POST "http://127.0.0.1:8000/items/" -H "Content-Type: application/json" -d '{"id": 1, "name": "Apple", "price": 0.5}' |
如果发送的请求体符合 Item
模型的定义,响应将返回相同的数据:
1 | { |
多个请求体参数
FastAPI 还支持接收多个请求体参数。可以通过List
来处理多个相同类型的请求体。例如,如果我们希望一次创建多个 Item
,可以做如下修改:
1 |
|
测试 bulk
路由的请求体可以如下进行:
1 | curl -X POST "http://127.0.0.1:8000/items/bulk" -H "Content-Type: application/json" -d '[{"id": 1, "name": "Apple", "price": 0.5}, {"id": 2, "name": "Banana", "price": 0.3}]' |
响应将返回传递的所有项:
1 | [ |
总结
在本篇文章中,我们详细探讨了如何在 FastAPI 中处理请求体,定义了 Pydantic 模型,并通过示例展示了如何接收和返回请求体的内容。这为后续文章提供了必要的基础,使我们能更好地理解如何处理响应。
在下一篇文章中,我们将探讨响应之响应的返回格式,包括如何设置响应模型、返回状态码等内容。希望您能继续关注这一系列教程!