FastAPI - 如何在响应中使用 HTTPException?

Posted

技术标签:

【中文标题】FastAPI - 如何在响应中使用 HTTPException?【英文标题】:FastAPI - How to use HTTPException in responses? 【发布时间】:2021-02-06 14:08:12 【问题描述】:

文档建议使用客户端错误引发 HTTPException,这很好。 但是如何在遵循 HTTPException 模型的文档中显示这些特定错误?意思是带有“详细”键的字典。

以下内容不起作用,因为 HTTPException 不是 Pydantic 模型。

@app.get(
    '/test', 
    responses=
        409 : 
            'model' : HTTPException, 
            'description': 'This endpoint always raises an error'
        
    
)
def raises_error():
    raise HTTPException(409, detail='Error raised')

【问题讨论】:

example 不会这样做吗?如果没有,你能告诉我们它在 swagger 文档中的样子吗? 【参考方案1】:

是的,它不是有效的 Pydantic 类型,但是由于您可以创建自己的模型,因此很容易为它创建模型。

from fastapi import FastAPI
from fastapi.exceptions import HTTPException
from pydantic import BaseModel


class Dummy(BaseModel):
    name: str


class HTTPError(BaseModel):
    detail: str

    class Config:
        schema_extra = 
            "example": "detail": "HTTPException raised.",
        


app = FastAPI()


@app.get(
    "/test",
    responses=
        200: "model": Dummy,
        409: 
            "model": HTTPError,
            "description": "This endpoint always raises an error",
        ,
    ,
)
def raises_error():
    raise HTTPException(409, detail="Error raised")

我相信这是你所期待的

【讨论】:

感谢您,我想知道为什么我无法在 swagger 文档中显示错误。我看到您需要添加responses: arg。

以上是关于FastAPI - 如何在响应中使用 HTTPException?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 pydantic 模式重命名来自数据库的响应 - FastAPI

如何从fastapi中的另一个api调用一个api?

有没有办法在 FastAPI 中漂亮地打印/美化 JSON 响应?

19.FastAPI中间件

10.FastAPI响应体

FastAPI 中间件窥探响应