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
相关产品推荐
相关产品推荐

