一、响应类型
一句话:FastAPI默认返回JSON,但也可以返回HTML、文件、纯文本等其他格式。
| 响应类型 | 用途 | 示例 |
|---|---|---|
JSONResponse |
默认响应,返回JSON数据 | return {"key": "value"} |
HTMLResponse |
返回HTML页面 | return HTMLResponse("<h1>标题</h1>") |
PlainTextResponse |
返回纯文本 | return PlainTextResponse("hello") |
FileResponse |
返回文件下载 | return FileResponse("./files/1.jpeg") |
StreamingResponse |
流式响应(大文件) | 生成器函数返回数据 |
RedirectResponse |
重定向到另一个地址 | return RedirectResponse(url) |
两种设置方式:
python
# 方式1:装饰器中指定
@app.get("/html", response_class=HTMLResponse)
async def get_html():
return "<h1>Hello World</h1>"
# 方式2:返回响应对象
@app.get("/file")
async def get_file():
return FileResponse("./files/1.jpeg")
二、自定义响应数据格式(response_model)
一句话:用Pydantic模型定义返回数据的结构,自动校验和过滤。既保证数据格式正确,又保护敏感信息不被泄露。
python
from pydantic import BaseModel
class News(BaseModel):
id: int
title: str
content: str
@app.get("/news/{id}", response_model=News)
async def get_news(id: int):
return {"id": id, "title": f"这是第{id}本书", "content": "这是一本好书"}
三、异常处理
一句话:当客户端请求出错时(如资源不存在),主动抛出HTTPException,返回标准错误信息。
python
from fastapi import HTTPException
@app.get('/news/{id}')
async def get_news(id: int):
id_list = [1, 2, 3, 4, 5, 6]
if id not in id_list:
raise HTTPException(status_code=404, detail="当前id不存在")
return {"id": id}
四、中间件
一句话 :中间件是一个在每个请求前后都会执行的函数,用来做统一处理(日志、认证、跨域等)。
python
@app.middleware("http")
async def middleware(request, call_next):
print('中间件开始处理') # 请求到达时执行
response = await call_next(request) # 传给下一个处理函数
print('中间件处理完成') # 响应返回时执行
return response
| 机制 | 控制范围 |
|---|---|
| 中间件 | 所有请求 |
| 依赖注入 | 指定的路由 |
五、依赖注入
一句话:把重复的代码逻辑(分页、认证、数据库连接)抽成一个函数,哪个接口需要就在参数里声明。
三步走:
python
# 第1步:创建依赖项(可复用的函数)
async def common_parameters(
skip: int = Query(0, ge=0),
limit: int = Query(10, le=60),
):
return {"skip": skip, "limit": limit}
# 第2步:导入Depends
from fastapi import Depends
# 第3步:在路由中声明依赖项
@app.get('/news/news_list')
async def get_news_list(commons=Depends(common_parameters)):
return commons
| 场景 | 解决方案 |
|---|---|
| 多个接口需要相同参数 | 依赖注入 |
| 所有接口需要统一处理 | 中间件 |
今日核心总结
- 响应类型:默认JSON,也可返回HTML、文件、纯文本等。
- response_model:用Pydantic定义返回数据格式,自动校验和过滤。
- 异常处理 :
HTTPException(status_code=404, detail="不存在")主动抛出错误。 - 中间件:所有请求前后执行的统一逻辑(日志、认证、跨域)。
- 依赖注入:可复用的组件(分页、数据库连接),用到哪个路由就声明。