Python学习笔记·第32天:FastAPI进阶——响应类型、中间件与依赖注入

一、响应类型

一句话: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
场景 解决方案
多个接口需要相同参数 依赖注入
所有接口需要统一处理 中间件

今日核心总结

  1. 响应类型:默认JSON,也可返回HTML、文件、纯文本等。
  2. response_model:用Pydantic定义返回数据格式,自动校验和过滤。
  3. 异常处理HTTPException(status_code=404, detail="不存在") 主动抛出错误。
  4. 中间件:所有请求前后执行的统一逻辑(日志、认证、跨域)。
  5. 依赖注入:可复用的组件(分页、数据库连接),用到哪个路由就声明。
相关推荐
Data_Journal3 小时前
用于网页抓取的 Node-unblocker
大数据·开发语言·数据库·python·scrapy
豆角焖肉3 小时前
SSM 聚合项目搭建:多 Maven 模块项目
开发语言·python·pycharm
青 春 记 忆4 小时前
零基础入门python20:Flask配置、扩展和蓝图拆分
python·flask·后端开发
m0_380743875 小时前
为 OpenAI 兼容接口配置教程
开发语言·python·node.js
xian_wwq5 小时前
【学习笔记】-深度认知系列-第1讲-AI不是魔法——三句话讲清楚人工智能到底是什么
笔记·学习·深度认知
M78佐菲5 小时前
c语言学习笔记:排序与查找方法整理
linux·c语言·笔记·学习·算法
别动我齐刘海6 小时前
机器人运动控制学习4——状态估计 State Estimation
c++·人工智能·学习·目标检测·机器学习·机器人·自动驾驶
狂云歌6 小时前
2025年读书回顾,AI+游戏+历史
人工智能·学习·游戏
leisoo80976 小时前
ig50数据落盘ClickHousevsTimescaleDBvsDuckDB实测对比 IG50免费开源股票数据API接口
开发语言·jvm·数据库·python·json
摇滚侠6 小时前
《SpringBoot 3:入门与应用实战》第 5 章 使用 Spring Boot 阅读笔记 9
java·spring boot·笔记