如何在 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 专家,所以我不能保证这是最一致的方法,但无论如何它都有效。
我想显示多重响应模型,所以我在一个文件中定义了响应并将其导入到主文件中,如下所示
@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 专家,所以我不能保证这是最一致的方法,但无论如何它都有效。