15 生成请求体与响应之使用JSON返回数据

在上一篇文章中,我们讨论了FastAPI中请求体与响应的返回格式。这篇文章将进一步探讨如何使用JSON格式返回数据,包括如何定义请求体和响应的JSON结构。接下来,我们会结合案例,演示如何在FastAPI中做到这一点。

FastAPI中的JSON响应

FastAPI使用Pydantic模型来定义请求体和响应格式。通过这个功能,我们可以方便地生成和验证JSON数据,使我们的API更加安全和可靠。

定义Pydantic模型

首先,我们需要创建一个Pydantic模型来定义我们的请求和响应体。在本示例中,我们将设计一个简单的用户信息管理API。

1
2
3
4
5
6
7
8
9
10
from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

# 定义用户模型
class User(BaseModel):
id: int
name: str
email: str

在上面的代码中,我们定义了一个User类,继承自BaseModel。这个模型包含了我们希望在请求体和响应中传递的字段:idnameemail

创建一个接收JSON请求体的API

接下来,我们将创建一个API端点,允许用户通过POST请求发送JSON数据,并返回这些数据作为响应。

1
2
3
@app.post("/users/", response_model=User)
async def create_user(user: User):
return user

在这个示例中:

  • 我们使用@app.post装饰器来定义一个POST请求的路由/users/
  • 函数create_user接受一个类型为User的参数。这将自动进行数据验证。
  • 我们在response_model中指定响应的类型为User,这样FastAPI会自动将返回的数据转换为JSON格式。

测试API

我们可以使用curl或Postman来测试这个API。以下是一个使用curl的示例:

1
curl -X POST "http://127.0.0.1:8000/users/" -H "Content-Type: application/json" -d '{"id": 1, "name": "Alice", "email": "alice@example.com"}'

你应该会得到相应的JSON数据:

1
2
3
4
5
{
"id": 1,
"name": "Alice",
"email": "alice@example.com"
}

生成复杂的JSON响应

FastAPI允许我们生成更复杂的JSON响应。假设我们想要返回用户的详细信息以及其创建的时间。我们可以更新模型以包含更多字段。

1
2
3
4
5
6
7
8
9
10
11
12
from datetime import datetime

class User(BaseModel):
id: int
name: str
email: str
created_at: datetime

@app.post("/users/", response_model=User)
async def create_user(user: User):
user.created_at = datetime.now() # 添加当前时间
return user

现在当我们发送一个创建用户的请求时,会得到包含created_at字段的响应。

小结

在本篇文章中,我们详细探讨了如何在FastAPI中生成请求体与响应的JSON数据。我们学习了如何:

  • 使用Pydantic模型定义请求体和响应结构。
  • 创建一个接收JSON请求的API,并返回相同的数据作为响应。
  • 扩展返回的JSON以包含更多信息。

下一篇文章我们将讨论路径参数与查询参数的使用示例,敬请期待!

15 生成请求体与响应之使用JSON返回数据

https://zglg.work/python-fastapi-zero/15/

作者

IT教程网(郭震)

发布于

2024-08-17

更新于

2024-08-18

许可协议

分享转发

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论