14 响应格式详解

在上一篇中,我们讨论了如何处理请求体和如何将请求体中的数据进行解析。在本篇中,我们将重点关注响应的格式,特别是如何在 FastAPI 中定义和返回响应体。最后,我们将通过一些案例来加深理解,为后续关于使用 JSON 返回数据的内容做好铺垫。

FastAPI中的响应体

在 FastAPI 中,响应体指的是服务器返回给客户端的数据格式。可以通过指定数据模型和内容类型来定义响应体。FastAPI 支持多种响应格式,如 JSON、HTML、Plain Text 等。

1. 使用响应模型

在 FastAPI 中定义响应体,我们通常会使用 Pydantic 模型。Pydantic 可以帮助我们定义数据结构并进行数据验证,这样可以确保返回的数据格式符合预期。

以下是一个简单的示例,演示如何使用 Pydantic 模型定义响应体:

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

app = FastAPI()

class Item(BaseModel):
id: int
name: str
price: float

@app.get("/items/{item_id}", response_model=Item)
async def read_item(item_id: int):
return Item(id=item_id, name="Sample Item", price=9.99)

在上面的代码中,我们定义了一个 Item 类,表示我们要返回的响应体。路由 read_item 将返回一个 Item 类型的响应。当客户端访问 /items/{item_id} 时,FastAPI 将会自动将响应序列化为 JSON 格式。

2. 自定义响应格式

除了使用默认的 JSON 格式,我们还可以通过 FastAPI 提供的 Response 对象来自定义返回的响应格式。例如,我们可以设置状态码、内容类型等。

以下是一个示例,展示如何自定义响应:

1
2
3
4
5
6
7
8
9
from fastapi import FastAPI, Response
from fastapi.responses import HTMLResponse

app = FastAPI()

@app.get("/html", response_class=HTMLResponse)
async def get_html_response():
html_content = "<html><body><h1>Hello, World!</h1></body></html>"
return Response(content=html_content, media_type="text/html")

在这个示例中,我们使用 response_class 参数指定返回 HTMLResponse 格式,响应内容被定义为一种简单的 HTML 格式。当客户端访问 /html 路径时,返回一个简单的网页。

3. 处理错误响应

FastAPI 也支持返回错误响应。通过抛出 HTTPException,你可以为特定情况设定错误状态码和错误消息:

1
2
3
4
5
6
7
8
9
from fastapi import FastAPI, HTTPException

app = FastAPI()

@app.get("/items/{item_id}")
async def read_item(item_id: int):
if item_id < 0:
raise HTTPException(status_code=400, detail="Item ID must be positive")
return {"item_id": item_id}

在此示例中,如果请求中的 item_id 为负数,FastAPI 将返回一个 400 Bad Request 的 HTTP 响应,详细信息为 "Item ID must be positive"

结论

在本篇中,我们深入探讨了 FastAPI 中的响应体处理,包括如何使用 Pydantic 模型定义响应、如何自定义响应格式,以及如何处理错误响应。这些都是构建 API 时非常重要的部分,能够帮助我们确保返回的数据符合客户端的期望。

在下一篇文章中,我们将进一步探讨如何使用 JSON 格式返回数据,并补充更多实际代码示例,帮助大家更好地理解如何在项目中应用这些概念。

作者

IT教程网(郭震)

发布于

2024-08-17

更新于

2024-08-18

许可协议

分享转发

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论