7 理解FastAPI的核心概念之请求与响应

在深入 FastAPI 之前,理解其核心概念是十分重要的。本篇文章将重点介绍请求与响应的内容,这是 web 应用程序通信的基础。前两篇内容中,我们安装并配置了 Uvicorn,以及在后续篇章中将讨论 ASGIWSGI 的关系。现在,我们将专注于请求与响应的细节。

FastAPI中的请求

在 FastAPI 中,用户的请求通常包含以下几个部分:

  • 请求方法:指定如何与资源交互,常见请求方法有 GETPOSTPUTDELETE 等。
  • 请求路径:请求的 URL。
  • 请求体POSTPUT 请求通常包含请求体,其中可以携带数据。
  • 请求头:元信息,例如内容类型 (Content-Type)、授权信息等。

示例:处理 GET 请求

首先,让我们看一个简单的案例,演示如何处理 GET 请求。

1
2
3
4
5
6
7
from fastapi import FastAPI

app = FastAPI()

@app.get("/items/{item_id}")
async def read_item(item_id: int, q: str = None):
return {"item_id": item_id, "query": q}

在这个示例中,当用户发送一个 GET 请求到路径 /items/123?q=test 时,item_id 将被提取为 123,同时查询参数 q 的值为 test。FastAPI 通过路径参数和查询参数自动解析请求。

FastAPI中的响应

请求处理完后,FastAPI 会返回响应。响应一般包含状态码、响应体、响应头等信息。

常用的响应类型

  • JSON响应:默认的返回形式
  • HTML响应:返回HTML内容
  • 文件响应:返回文件下载

示例:返回JSON响应

继续我们的示例,快速看看如何返回一个 JSON 响应:

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

app = FastAPI()

@app.get("/items/{item_id}")
async def read_item(item_id: int):
return {
"item_id": item_id,
"message": "Item fetched successfully."
}

当此请求成功时,响应的内容将是 JSON 格式,API 用户将收到如下响应:

1
2
3
4
{
"item_id": 123,
"message": "Item fetched successfully."
}

返回不同类型的响应

我们也可以返回不同类型的响应,例如返回 HTML 内容:

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

app = FastAPI()

@app.get("/html", response_class=HTMLResponse)
async def get_html():
return "<html><body><h1>Hello, World!</h1></body></html>"

访问 /html 路径时,将会得到一个简单的 HTML 页面。

自定义响应

我们可以使用 JSONResponse 类来自定义响应,来设置状态码或特殊的响应数据格式:

1
2
3
4
5
6
7
8
9
from fastapi import FastAPI
from fastapi.responses import JSONResponse

app = FastAPI()

@app.get("/custom-response")
async def custom_response():
content = {"data": "This is a custom response"}
return JSONResponse(content=content, status_code=200)

这里我们使用 JSONResponse 结合自定义内容,并返回了状态码为 200 的响应。

请求与响应的示例整合

以下是一个更复杂的例子,它展示了如何同时处理请求和生成响应。我们通过 POST 请求添加新项目,并用 GET 请求获取项目列表:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from fastapi import FastAPI, HTTPException
from typing import List

app = FastAPI()

items = []

@app.post("/items/", response_model=dict)
async def create_item(item: dict):
items.append(item)
return {"message": "Item added", "item": item}

@app.get("/items/", response_model=List[dict])
async def read_items():
return items

在此案例中,我们使用 POST 请求将项目添加到 items 列表,并用 GET 请求获取所有项目的列表。

总结

掌握请求与响应的流程是使用 FastAPI 开发网络应用的重要一步。在本篇文章中,我们探讨了如何接收请求、处理参数、以及如何返回响应。理解和熟练使用这些基本概念将为你后续学习 ASGIWSGI 奠定良好的基础。

希望这一篇关于请求与响应的讨论能够帮助你更好地理解 FastAPI,并在开发中应用这些关键概念!接下来,我们将讨论更深层次的内容:ASGIWSGI 的区别及各自的应用场景。

7 理解FastAPI的核心概念之请求与响应

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

作者

AI免费学习网(郭震)

发布于

2024-08-17

更新于

2024-08-18

许可协议

分享转发

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论