You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FastAPI自定义响应模型:如何将列表格式响应封装为带items字段的对象

修改FastAPI接口响应为带items字段的对象格式

我来帮你解决这个问题,其实有两种简单的方式可以实现你想要的响应格式,下面分别说明:

方法1:直接构造返回字典

这是最快速的实现方式,不需要额外定义模型,直接把查询到的结果包装在一个包含items键的字典里返回即可:

@router.get('/articles/', response_model=dict)
async def main_endpoint():
    query = articles_model.articles.select().where(articles_model.articles.c.status == 2)
    articles = await db.database.fetch_all(query)
    return {"items": articles}

不过这种方式的缺点是没法利用Pydantic的类型校验和自动生成API文档的优势,如果你需要严格的类型约束,更推荐下面的方法。

方法2:定义新的Pydantic响应模型(推荐)

FastAPI推荐用Pydantic模型来规范请求和响应格式,这样不仅能做数据校验,还能自动完善接口文档。你只需要创建一个包含items字段的新模型:

步骤1:定义新的响应模型

在你的articles_schema.py里添加一个新的Pydantic模型:

from pydantic import BaseModel
from typing import List

class Articles(BaseModel):
    # 你的原有模型定义,比如title、content等字段
    title: str
    content: str

class ArticlesResponse(BaseModel):
    items: List[Articles]

步骤2:修改接口的response_model

然后把原接口的response_model改成这个新模型,同时返回对应的结构:

@router.get('/articles/', response_model=articles_schema.ArticlesResponse)
async def main_endpoint():
    query = articles_model.articles.select().where(articles_model.articles.c.status == 2)
    articles = await db.database.fetch_all(query)
    return {"items": articles}

这样修改后,接口就会返回你想要的外层包含items字段的对象格式,同时还能保留FastAPI的类型校验和自动文档生成功能。


内容的提问来源于stack exchange,提问作者Riski Nurohman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 16:52:27