Jupyter AI

15 Python的FastAPI详细教程:生成请求体与响应之使用JSON返回数据

📅 发表日期: 2024年8月18日

分类: 🚀Python FastAPI 入门

👁️阅读: --

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

FastAPI中的JSON响应

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

定义Pydantic模型

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

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数据,并返回这些数据作为响应。

@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的示例:

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数据:

{
    "id": 1,
    "name": "Alice",
    "email": "alice@example.com"
}

生成复杂的JSON响应

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

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以包含更多信息。

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

🚀Python FastAPI 入门 (滚动鼠标查看)