尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

fastapi: 封装接口的数据返回格式,支持文档显示数据格式

fastapi: 封装接口的数据返回格式,支持文档显示数据格式
📅 发布时间:2026/7/24 21:56:40

一,代码:

返回数据用的泛型封装类:

# app/core/BaseResponse.py
from typing import Annotated, List, TypeVar, Generic, Optional
from pydantic import BaseModel# 1. 定义一个泛型变量 T,代表 data 字段可能接入的任何 Pydantic 模型
T = TypeVar("T")# 2. 统一定义最外层的结构
class ApiResponse(BaseModel, Generic[T]):code: int = 200message: str = "success"data: Optional[T] = None  # data 可以是任意类型 T# 便捷的类方法,方便业务代码调用# 返回成功数据@classmethoddef success(cls, data: Optional[T] = None, message: str = "success"):return cls(code=200, message=message, data=data)# 返回失败数据@classmethoddef fail(cls, code: int = 400, message: str = "fail"):return cls(code=code, message=message, data={})

接口调用:

# 输出给前端的用户信息(安全公开,不含密码,包含只读字段)
class UserResponse(BaseModel):id: int = Field(..., description="用户的唯一ID")username: str = Field(..., description="用户名")nickname: str = Field(..., description="用户昵称")class Config:from_attributes = Truejson_schema_extra = {"example": {"id": 1, "username": "alex_green", "nickname": "alex@example.com"}}# 这是你需要补上的分页响应模型
class UserListPageResponse(BaseModel, Generic[T]):total: intitems: List[T] # 核心:这里告诉 Pydantic,items 里面才是用户列表@router.get("/all2", response_model=ApiResponse[UserListPageResponse[UserResponse]], summary="获取商品和用户数据")
async def get_all_users2(request: Request,prod_data: Annotated[UserListForm, Query()],db: AsyncSession = Depends(get_db)):# 参数page = prod_data.pagepage_size = prod_data.page_size# 使用 func.count().over() 作为一个隐藏列stmt = (select(User, func.count().over().label("total_count")).where(User.status == 1).offset((page - 1) * page_size).limit(page_size))result = await db.execute(stmt)# 因为多查了一个 count 列,result 出来的每一行是一个元组 (User对象, total_count值)rows = result.all()# 解析结果if not rows:return {"total": 0, "page": page, "size": page_size, "items": []}# 无论哪一行,对应的 total_count 都是一样的,取第一行的即可total = rows[0].total_countitems = [row.User for row in rows]# 数据data = {"items": items,"total": total,}# return ApiResponse.fail(code=403,message="测试报错")return ApiResponse.success(data=data)

 

二,测试效果:

数据返回

image

文档:

image

 

相关新闻

  • 3个颠覆性功能:为什么ImageGlass正在重新定义图片浏览体验
  • Switch破解新纪元:5分钟掌握大气层系统的完整安装与优化秘诀
  • 武汉大金空调维修清洗加氟电话|捌壹捌家电24小时上门故障抢修靠谱团队 - 资讯速览

最新新闻

  • RTL8852CE常用命令
  • Spring 源码系列(9): 循环依赖终极拷问:为什么用三级缓存而不是二级
  • 深圳汽车后市场服务GEO优化公司选型指南丨2026生成式引擎优化服务商深度测评与TOP5实力盘点 - 子柔传媒
  • AICR:AI Code Review 从 0 到 1 的真实演进路线
  • 三步解锁网易云音乐NCM加密:ncmdumpGUI让你的音乐无处不在
  • 完全指南:5分钟掌握免费在线EPUB编辑器EPubBuilder

日新闻

  • 武汉卡地亚LOVE钻戒与钻石项链回收变现攻略|多家门店行情参考 - 大牌深度测评
  • 2026年无锡地区健康管理如何考量?四家机构业务体系概览
  • 2026图片去水印软件哪个好用 手机电脑免费工具盘点 - 免费软件工具方法教程

周新闻

  • SaaS软件行业GEO实践:AI搜索时代的品牌可见性与获客新路径
  • 什么是PCTFE?医药高端包装的“防潮王牌“材料
  • 【JVM调优实战】16-可视化利器-JConsole-VisualVM-JMC

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号