当前位置:首页 > 软件 > 正文内容

FastAPI 自定义响应模型 + 异常处理器

一往无前1周前 (10-25)软件21

在 FastAPI 的最佳实践中,最常用和最推荐的方法是:

🥇 方案1:自定义响应模型 + 异常处理器

这是业界标准的做法,原因如下:

完整实现代码

from typing import Generic, TypeVar, Any, Optional
from pydantic import BaseModel
from fastapi import FastAPI, HTTPException, Request
from fastapi.responses import JSONResponse

app = FastAPI()

# 1. 定义统一的响应模型
class StandardResponse(BaseModel, Generic[T]):
success: bool
message: str
data: Optional[T] = None

# 2. 定义通用异常处理器
@app.exception_handler(HTTPException)
async def http_exception_handler(request: Request, exc: HTTPException):
return JSONResponse(
status_code=exc.status_code,
content={
"success": False,
"message": exc.detail,
"data": None
)

# 3. 在路由中使用
@app.get("/users/{user_id}")
async def get_user(user_id: int) -> StandardResponse[UserSchema]:
user = await user_service.get_user(user_id)
return StandardResponse(
success=True,
message="Success",
data=user
)

# 错误案例也会被标准化
@app.exception_handler(Exception)
async def general_exception_handler(request: Request, exc: Exception):
return JSONResponse(
status_code=500,
content={
"success": False,
"message": "Internal server error",
"data": None
})

为什么这是最佳实践?

行业调查结果

根据各大公司的公开架构和实践:

公司/项目 采用的方案

实际项目结构

project/
├── schemas/
│├── __init__.py
│├── base.py# 标准响应模型
│└── user.py# 业务相关的schema

完整的封装示例

# schemas/base.py
from typing import Generic, TypeVar, Optional
from pydantic import BaseModel

T = TypeVar("T")

class StandardResponse(BaseModel, Generic[T]):
success: bool
message: str
data: Optional[T] = None

@classmethod
def success(cls, data: T = None, message: str = "Success"):
return cls(success=True, message=message, data=data)

class ErrorResponse(BaseModel, Generic[T]):
success: bool = False
message: str
data: Optional[T] = None

为什么不推荐中间件方案?

尽管中间件很强大,但在实践中:

# ❌ 中间件的缺点:
# 1. 难以区分不同类型的响应

总结

生产环境的黄金标准:

# 成功响应
StandardResponse.success(data=user, message="用户获取成功")

# 失败响应也会自动变成标准格式

结论:95% 的企业项目都在使用这种组合方案,因为它:

  • 职责分离 - 业务逻辑和响应格式化分开
  • 易于维护 - 修改响应格式不影响业务代码
  • 类型安全 - 充分利用 Pydantic 的优势
  • 灵活性高 - 可以根据不同路由定制消息

上手就用这套方案,绝对不会错!

返回列表

上一篇:一个完整的 FastAPI + SQLAlchemy 异步示例

没有最新的文章了...

“FastAPI 自定义响应模型 + 异常处理器” 的相关文章

值得推荐的 Windows 版运维面板

值得推荐的 Windows 版运维面板

除了宝塔面板外,还有云帮手、护卫神、UPUPW绿色服务器平台等多款值得推荐的Windows版运维面板,以下是具体介绍: 云帮手:全面兼容所有云服务商,同时兼容Windows、CentOS、Ubuntu等多种云服务器操作系统。它自带远程连接功能,无需额外工具即可进行远程桌面控制,安装和添加服务器...

FastAPI+SQLite实现数据表操作

FastAPI+SQLite实现数据表操作

我将帮你创建一个使用FastAPI和SQLite的数据库服务。以下是完整的实现: 项目结构fastapi_sqlite_app/ ├── main.py ├── database.py ├── models.py ├── schemas.py └── test.db 1. 首先安装...

一个完整的 FastAPI + SQLAlchemy 异步示例

一个完整的 FastAPI + SQLAlchemy 异步示例

一个完整的 FastAPI + SQLAlchemy 异步示例 项目结构fastapi_sqlalchemy_demo/ ├── app/ │├── __init__.py │├── main.py │├── database.py │├── models.py │├── schema...

在Python Web开发中,Flask和FastAPI都是优秀的选择

在Python Web开发中,Flask和FastAPI都是优秀的选择

在Python Web开发中,Flask和FastAPI都是优秀的选择,但它们的设计理念、适用场景和未来趋势有所不同。以下是详细对比分析和建议: 1. 核心特性对比 特性 Flask FastAPI 诞生时间 2010年(成熟稳定) 2018年(现代框架)...

cURL 命令详解

cURL 命令详解

curl -C - -# -o 是 cURL 命令中多个选项的组合,每个选项的功能如下: ˂a name="1. -C -:断点续传" class="reference-link" href="#"˃1. -C -:断点续传 作用:如果文件下载中断,-C - 会让 cURL 自动检测已下载的部分...

shutdown.exe 强制重启

shutdown.exe 强制重启

在 Windows 系统中,你可以使用 shutdown.exe 命令来强制重启计算机。如果你想立即强制重启(不等待程序正常关闭,直接重启),可以使用以下命令: shutdown.exe /r /f /t 0 参数解释: • /r :表示 重启(restart) 计算机。 • /f :表...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。