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. 依赖注入:可复用的组件(分页、数据库连接),用到哪个路由就声明。
相关推荐
~kiss~6 小时前
A Survey of On-Policy Distillation for LLMs 学习(一)
学习
M--Y7 小时前
LangGraph 工作流模式
开发语言·javascript·python·langchain·大模型·llm·langgraph
岁月宁静7 小时前
DeepSeek Harness 实战与架构解析:让 Agent 从“会聊”到“能交付”
人工智能·python·agent
一只大鸽子7 小时前
游戏开发笔记4-像素画基础 轮廓-直线和曲线
笔记
LiaoWL1237 小时前
NumPy 入门实战(二):向量化与余弦相似度——从 ndarray 到 Embedding
python·numpy·embedding
forest_098 小时前
多 Agent 协作第二课:交叉验证≠独立验证
人工智能·python·算法·机器学习·prompt·agi
小杨小杨、努力变强!8 小时前
python学习笔记
笔记·学习
杨逢昌工厂6S管理10 小时前
150-杨逢昌一线现场诊断笔记:越管一线越抵触背后的熵增机理与基准化治理
经验分享·笔记·职场和发展·学习方法
databook11 小时前
时间序列数据,先拆规律还是先查异常
python·数据挖掘·数据分析
师夷长技以自愈11 小时前
手搓 AI Agent 第 8 篇:从手写循环到画流程图——LangGraph 封装
人工智能·python