如何在 FastAPI 中编写多响应 BaseModel?

How to write multiple response BaseModel in FastAPI?

我想显示多重响应模型,所以我在一个文件中定义了响应并将其导入到主文件中,如下所示

@app.post("/mask", responses=Example_Mask)

在我的 response.py 中,我将 Example_Mask 定义为

class Example_Mask(BaseModel):

    class Config:
        schema_extra = {
            "example": {
                "200": {"model": Example_200_Mask},
                "422": {"model": Example_422_Mask},
                "500": {"model": Example_500},
                "504": {"model": Example_504}
            }
        }

我已经用相同的方式定义了所有 Example 模型,但我得到

TypeError: 'ModelMetaclass' object is not a mapping

错误。你能告诉我哪里错了吗?

您当前传递给响应的内容不是可以映射的内容。您目前正在向它传递一个对象 (class Example_Mask (BaseModel))。

要工作响应,需要它可以映射到的值,即,如果您删除 example

,您的 Config 中的 schema_extra

所以为了工作你可以这样做:

class Example_Mask(BaseModel):

    class Config:
        schema_extra = {
                "200": {"model": Example_200_Mask},
                "422": {"model": Example_422_Mask},
                "500": {"model": Example_500},
                "504": {"model": Example_504}
        }

@app.post("/mask", responses=Example_Mask.Config.schema_extra)

或者你可以只传递一个字典,out of class:

responses = {
   "200": {"model": Example_200_Mask},
   "422": {"model": Example_422_Mask},
   "500": {"model": Example_500},
   "504": {"model": Example_504}
}

@app.post("/mask", responses=responses)

我不是 FastAPI 专家,所以我不能保证这是最一致的方法,但无论如何它都有效。