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

FastAPI使用Response Model时如何向响应中插入查询参数等额外信息

解决方案

核心问题是你当前的响应模型直接绑定了股票列表数组结构,FastAPI会自动过滤掉不在响应模型定义内的字段,因此无法插入额外的查询参数、分页信息。按以下步骤修改即可:

1. 新增封装型响应Schema

在你的schema文件中新增两个模型,分别用于定义查询参数结构和最终的响应结构:

from pydantic import BaseModel
from typing import List, Optional
import math

# 查询参数与分页信息模型
class QueryMeta(BaseModel):
    limit: int
    skip: int
    total_count: Optional[int] = None
    total_page: Optional[int] = None

# 最终响应模型,同时包含元信息和股票数据
class StockListResponse(BaseModel):
    params: QueryMeta
    data: List[StockResponse]

    class Config:
        orm_mode = True

注:你给出的示例返回格式是对象数组,该结构不符合通用API设计规范,前端解析成本更高,这里推荐使用单对象包裹的结构,如果必须用数组格式,可以将响应模型改为List[dict],但会丢失自动校验能力。

2. 修改路由配置与返回逻辑

调整路由的response_model为新定义的StockListResponse,同时修改返回值结构,把查询参数、分页信息和股票数据一起返回:

@router.get("/", response_model=schemas.StockListResponse, tags=["Stocks"])
def get_stocks(db: Session = Depends(get_db), current_user: int = Depends(oauth2.get_current_user), limit: int = 100, skip: int = 0):
    utils.increase_request_counter(current_user, db)
    # 统计总条数与总页数
    total_count = db.query(models.Stock).count()
    total_page = math.ceil(total_count / limit) if limit > 0 else 1
    # 查询股票数据
    stocks = db.query(models.Stock).limit(limit).offset(skip).all()
    # 构造响应结构
    return {
        "params": {
            "limit": limit,
            "skip": skip,
            "total_count": total_count,
            "total_page": total_page
        },
        "data": stocks
    }

修改完成后接口就会返回包含参数信息和股票数据的标准结构,FastAPI会自动按照你定义的Schema做字段校验,不会过滤掉额外的元信息。

内容的提问来源于stack exchange,提问作者Maximilian Sören Pollak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 21:24:02