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. 依赖注入:可复用的组件(分页、数据库连接),用到哪个路由就声明。
相关推荐
志尊宝5 小时前
Vue3 零基础每日笔记(018):按键与鼠标修饰符——回车搜索、Ctrl+S 保存这样写
javascript·vue.js·笔记
weixin_440730505 小时前
队列QUEUE介绍+类型示例(先进先出、后进先出、优先级高先出、双端进入、生产者+消费者线程)
python·线程·queue
这是程序猿5 小时前
Java线程池深度剖析:源码原理、核心参数、任务调度与生产调优实战
java·开发语言·python
Web3&Basketball5 小时前
ChatGPT 路由自证:跨客户端实测对照
python·大模型·agent·推理·推理优化
Patrick在香港5 小时前
Claude 工作提醒自动化:香港天文台四个接口三个「更新时间」,警告到期了却还在生效
python·api·claude·数据抓取·香港
用户8356290780515 小时前
Python 实现 Word 文档域的插入与管理
后端·python
quantdash_cc5 小时前
从数据采集到策略消费,股票日内行情管道应该怎么设计?
开发语言·python·数据分析·量化交易·股票数据·quantdash
程序员杰哥5 小时前
UI自动化测试:Jenkins配置
自动化测试·软件测试·python·测试工具·职场和发展·jenkins·测试用例
蓝天下的守望者5 小时前
DRAM结构学习
学习·dram
hhzz5 小时前
【OpenCV 入门到精通 07】滤波、阈值与形态学:图像去噪与形状处理
人工智能·python·opencv·计算机视觉