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. 依赖注入:可复用的组件(分页、数据库连接),用到哪个路由就声明。
相关推荐
海绵宝宝转agent7 小时前
learn-claude-code第1-5章开源学习笔记分享
人工智能·笔记·python·学习
小奇不哭7 小时前
ROS2 单节点,RGB-D 深度相机局部路径提取 + B 样条平滑路径 + YOLOv8 障碍物检测 + 深度测距,用于移动机器人视觉局部循迹。
python·yolov8·ros2·cv2·路径探索循迹
每天都要写算法(努力版)8 小时前
【行业前沿报告】DAgger:让智能体在自己走到的状态上学习
人工智能·学习·机器学习
小小龙学IT8 小时前
Python scikit-learn 机器学习库深度解析
python·机器学习·scikit-learn
2601_962071578 小时前
类变量和全局变量的查找路径有什么区别?
开发语言·python
卷无止境9 小时前
独立开发者的"富矿地带":哪些垂直领域值得你押注一辈子?
后端·python
Java后端的Ai之路9 小时前
Python进阶探索29_eval内置函数
开发语言·python·探索·eval·内置函数
计算机毕业编程指导师9 小时前
计算机毕设选题推荐:基于Hadoop与Spark的Steam游戏数据分析系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习 深度学习
大数据·hadoop·python·计算机·spark·毕业设计·steam游戏
计算机毕业编程指导师10 小时前
【计算机毕设选题推荐】基于Hadoop+Spark的白鹿抖音评论大数据分析与可视化系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习 深度学习
大数据·hadoop·python·计算机·spark·毕业设计·抖音评论
Zootopia62610 小时前
飞行力学知识梳理1|飞行性能与稳定性
人工智能·python·算法·机器学习·无人机·学习方法·信息与通信