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. 依赖注入:可复用的组件(分页、数据库连接),用到哪个路由就声明。
相关推荐
废弃的小码农12 小时前
功能测试--Day07--Python编程基础
开发语言·python
zx11545012 小时前
大模型工具调用次数限制
人工智能·python
Jul1en_12 小时前
【Claude Code Compact】源码级别的学习上下文压缩
java·前端·学习·github·ai编程
liferecords12 小时前
阅读笔记:ExtractBench: A Benchmark for Schema-Guided Enterprise Document Extraction
笔记
fengci.12 小时前
Microweber CMS 未授权路径穿越漏洞(CVE-2026-65694)
android·开发语言·前端·学习·php
MC皮蛋侠客13 小时前
SQLAlchemy 系列(八):AsyncIO、并发与 Web 生命周期——让每个并发任务持有自己的 Session
数据库·python
m4Rk_13 小时前
【论文阅读】Agent 记忆机制(28):MEM1——将记忆压缩融入推理,实现近似恒定上下文的长程智能体
论文阅读·人工智能·学习·开源·github
尤乐娃子13 小时前
进入大厂(厂子大)实习Day8
前端·笔记·实习
一只小菜鸡..13 小时前
南京大学 操作系统 (JYY) 学习笔记:持久化的黑魔法——从磁铁、刻坑到闪存电荷
服务器·笔记·学习
aFakeProgramer14 小时前
Linux版本兼容问题及RTA-VRTE环境配置笔记
linux·笔记