python-3.x 而不是引发返回

ctzwtxfj  于 2023-03-31  发布在  Python
关注(0)|答案(2)|浏览(146)

有谁能帮我理解为什么当状态为200时不引发HTTPException,而是引发return

working with fastApi

代码示例:

@app.delete("/delete")
def delete(id = Query(...,description="Delete ID to be deleted")):
    if id not in dictionary:
        raise HTTPException(status_code=404,detail="Delete Id doesn't exists.")
    del dictionary[id]

    return {"Success":"Delete deleted!"}

我想知道为什么不使用示例:

raise HTTPException(status_code=200,detail="Delete deleted!")

这是正确的使用方法吗?

kpbwa7wx

kpbwa7wx1#

首先是因为语义:异常是一种语言结构,它的意思不是返回函数的结果。它破坏了FastAPI应用程序的正常流程,我猜它会/可能会破坏大多数中间件处理(如CORS头),因为突然发生了异常。
第二:因为你可能想要返回的不仅仅是detail键下的信息,它将无法使用FastAPI内置的response_model机制,该机制允许你以声明方式(即通过配置视图装饰器)调整和验证每种类型请求的响应模型。

db2dz4w8

db2dz4w82#

1.回报更好
1.很多时候结果应该是相等的

  1. raise中断所有下一个中间件(pre,mid,post)
    1.这里是重定向登录页面中间件
    `
class Middleware(APIRoute):
    def get_route_handler(self) -> Callable:
        original_route_handler = super().get_route_handler()

    async def custom_route_handler(req: Request) -> Response:
        try:
            res: Response = await original_route_handler(req) #original request
        except HTTPException as e: #catch login exception
            if e.status_code == status.HTTP_403_FORBIDDEN:
                return RedirectResponse(url = Const.DEFAULT_PAGE) #redirect to home page
            else:
                raise e #other exception process normally 
            
        return res

    return custom_route_handler

`

相关问题