fastapi的请求和响应
时间: 2025-04-29 14:53:39 浏览: 37
### FastAPI 中请求和响应的处理
#### 定义不同类型的HTTP请求
为了定义不同的 HTTP 请求,在 FastAPI 中使用特定的装饰器来区分请求的方法。`@app.get()`用于定义GET请求的 API;`@app.post()`用于定义POST请求的 API;同样地,还有 `@app.put()` 和 `@app.delete()` 分别用于 PUT 和 DELETE 请求[^1]。
#### 处理查询参数
对于带有查询参数的接口,可以直接在处理函数中定义这些参数。例如:
```python
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def root(name: str, age: int | None = None):
return {"message": f"嘿,{name}-{age},欢迎再次学习"}
```
此代码片段展示了如何接收名为 `name` 的必填字符串参数以及可选整数参数 `age`。
#### 返回JSON响应
FastAPI 自动将 Python 函数的结果转换成 JSON 格式的 HTTP 响应。比如下面的例子展示了一个简单的 GET 方法实现,它接受路径参数并返回相应的字典对象作为 JSON 响应:
```python
from fastapi import FastAPI
app = FastAPI()
@app.get("/items/{item_id}")
async def read_item(item_id: int):
return {"item_id": item_id}
```
这里,当访问 `/items/某个ID` 这样的 URL 时,服务器会根据提供的 ID 构建一个包含该项信息的对象,并将其序列化为 JSON 发送给客户端[^3]。
#### 使用 Pydantic 模型进行数据验证
通过继承自 Pydantic 的 `BaseModel`, 可以为 POST 或其他携带 body 的请求指定期望接收到的数据格式。这不仅简化了开发者的工作量,还增强了应用程序的安全性和可靠性。考虑如下案例:
```python
from pydantic import BaseModel
from typing import Optional
class Payload(BaseModel):
key1: str
key2: str
@app.post("/submit/")
async def submit_data(payload: Payload):
# payload 已经经过了验证
...
```
在这个场景下,任何向 `/submit/` 发送的有效负载都必须遵循由 `Payload` 类所设定的模式—两个必需的字符串字段 (`key1` 和 `key2`)。一旦输入不符合规定,则立即触发异常机制并向调用方反馈具体的错误详情[^5]。
#### 错误处理与自定义异常处理器
每当遇到未捕获的异常或是非法的数据提交情况,默认情况下 FastAPI 都能妥善应对并通过预设的方式告知前端发生了什么问题。然而,也允许开发人员针对某些特殊情况编写个性化的错误页面或消息提示逻辑。特别是关于表单验证失败的情形,可以通过重写内置的行为来自定义错误报告的形式[^2]。
阅读全文
相关推荐


















