当前位置: 首页 > 知识库问答 >
问题:

如果使用响应模型,如何将附加信息(如查询)插入到响应中?

皇甫飞光
2023-03-14

我现在正在尝试使用FastAPI构建一个API。我想让一个路由(接受查询)也在响应中返回它们,以便用户可以仔细检查他输入的查询(也可以查看总共有多少页等)。

我正在使用response_model响应方式,并且一生都无法弄清楚如何将其他参数插入响应中。

我已经尝试将响应模型中的所有字段设置为可选,因此它在检查时不再抛出错误,但它仍然只是(如果它响应)在没有添加信息的情况下响应。在下面,您可以看到我用于response_model的路由和架构。

这是我想应用这个的路线。

@router.get("/", response_model=List[schemas.StockResponse], tags=["Stocks"])
def get_stocks(response= Response, 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)
    stocks = db.query(models.Stock).limit(limit).offset(skip).all()
    return stocks

我想要的是,它返回股票列表,但也返回有关上述查询参数的信息。例如:

[{"params": {
           "limit" : 10,
           "skip": 0 },
 {"data": [ *then list of dictionaries that it already returns*]}]

类似这样的东西,但我不能让它返回任何东西,除了字典列表。

这是该模型正在使用的模式(斯托克响应)

class StockBase(BaseModel):
    name: str
    ticker: str
    price: float
    dividends: float
    dividend_yield: float
    ftweek_low: Optional[float] = Body(None)
    ftweek_high: Optional[float] = Body(None)
    trading_market: Optional[str] = Body(None)
    market_cap: Optional[int] = Body(None)
    payout_ratio: Optional[float] = Body(None)
    beta: Optional[float] = Body(None)
    business_summary: Optional[str] = Body(None)
    website: Optional[str] = Body(None)
    logo: Optional[str] = Body(None)
    time_updated: Optional[datetime] = Body(datetime.now())
    sector: Optional[str] = Body(None)
    industry: Optional[str] = Body(None)
    
class StockResponse(StockBase):
    ID: Optional[int]
    name: Optional[str]
    ticker: Optional[str]
    price: Optional[float]
    dividends: Optional[float]
    dividend_yield: Optional[float]
    time_created: Optional[datetime]
        
    class Config:
         orm_mode = True    

共有1个答案

孟鸿朗
2023-03-14

创建一个与您要返回的内容匹配的响应模型,并相应地填充它:

from pydantic import BaseModel


class StockRequestParams(BaseModel):
  limit: int
  skip: int


class StockResponseWithMetadata(BaseModel):
  params: StockRequestParams
  stocks: List[StockResponse]


def get_stocks(...):
  ...
  return StockResponseWithMetadata(
    params=StockRequestParams(hits=hits, limit=limit), 
    stocks=socks,
  )
 类似资料:
  • 我非常确定“Expires”是有效的HTTP响应头类型。但是当我尝试在代码中设置它时:(这是在ActionFilter.OnActionExecuted方法中) 我最后有一个例外: InvalidOperationException:错误使用的标头名称。确保请求头与HttpRequestMessage一起使用,响应头与HttpResponseMessage一起使用,内容头与HttpContent对

  • 我有一个React Native (0.59.8)应用程序,它在模拟器上运行得非常好,当通过Xcode部署到设备上时也非常好,但当通过TestFlight分发大约3分钟时,只有在用户没有登录的情况下,才在应用程序启动时没有响应。 事情是这样的: 我通过TestFlight安装我的应用程序 打开应用程序。 欢迎页面上有一个“开始”按钮,将用户带到登录屏幕。我点击该按钮 大约2-3分钟什么都没发生 应

  • 我有一个Java Servlet类,当我的应用程序中存在身份验证问题时,我尝试在其中设置错误状态。但是,问题是,我可以设置错误状态,但无法在响应正文中设置错误消息。以下是我的尝试: 授权筛选器。Java语言 例外处理程序。Java语言 我的Trowable包含要显示的正确HTTP状态。我尝试了两件事: 我试着按照这个方法做:public ultsendError(int sc,java.lang.

  • 我目前正在运行Wiremock standalone,我试图模拟一个访问数据库的服务。 我的映射文件如下所示:- 所以如果我点击这个网址:- http://localhost/testService/search/details?productCode=12345 然后它将进入数据库获取退货产品12345。 如果我向服务发送数据库中不存在的请求(例如productCode=0),它会给我一个标准的

  • 问题内容: 我的控制器中有以下代码: 在我的RSpec控制器测试中,我想验证某个场景确实收到了成功的json响应,因此我有以下内容: 尽管在运行测试时出现以下错误: 我是否检查响应不正确? 问题答案: 您可以检查响应对象并验证它是否包含期望值: 编辑 将此更改为a 会比较麻烦。这是一种处理方法: 请注意,它不会响应,因此需要一个或真实的模型实例。

  • 我们使用API网关Lambda函数DynamoDB来获取数据,并使用DynamoDB查询方法。对于260.4KB的数据(项目总计数:675 |扫描计数:3327),需要3.49秒。 要求: 我们有4个客户,我们每天计算客户销售用户的数据,并将其存储在数据库中。 表结构: 主键:ClientId 排序键:日期UserId 其他属性:日期 在查询中-我们使用主键ClientId 目前,我们正在为Dyn