Flask中的自定义中止映射/异常

wswld

Flask400异常(abort()的默认消息为

{
  "message": "The browser (or proxy) sent a request that this server could not understand."
}

对于404

{
  "message": "The requested URL was not found on the server.  If you entered the URL manually please check your spelling and try again. You have requested this URI [/obj/] but did you mean /obj/ or /obj/<int:id>/ or /obj/<int:id>/kill/ ?"
}

当我在API中得到这些消息作为回复时,我很难理解这些消息(尤其是第一个消息,我认为加密或标头出了点问题),我觉得尝试为每个abort()异常手动覆盖文本有点累因此,我更改了映射:

from flask import abort
from werkzeug.exceptions import HTTPException


class BadRequest(HTTPException):
    code = 400
    description = 'Bad request.'


class NotFound(HTTPException):
    code = 404
    description = 'Resource not found.'


abort.mapping.update({
    400: BadRequest,
    404: NotFound
})

对于400的情况下,效果很好。但是,谈到404它,仍然是相同的信息。我测试了它在我的代码在同一个地方-它的工作原理为abort(400)abort(403)和其他一些人,但这样做的神不知鬼不觉通过默认消息覆盖abort(404)调试没有太大帮助。这里的罪魁祸首是什么?

更新是的,我使用的不是abort从导入,因为后者没有映射,并且它是一个函数,而不是对象。此外,它确实适用于大多数例外情况,因此这可能不是真正的问题。flaskflask_restfulAborter

更新2abort.mapping似乎是执行完美的罚款。有问题的异常被覆盖,包括404证明

更新3 :我整理了一个小沙箱,用于调试。 (由于长期未解之谜,已删除了回购协议)。

wswld

我花了一些时间,但现在我实际上找到了一个地方,所有地方都因404错误而出轨实际上,这是Flask-restful中未记录的功能。这里代码您选择的任何消息都会一直保留到该位置,然后它将成为默认消息。现在,我们需要的只是放入ERROR_404_HELP = False我们的配置中,一切都会按预期进行。

为什么此代码甚至一开始就存在?好的,也许我可以接受,但是应该贯穿整个文档。甚至当我用Google搜索常量的名字,我只得到了几个GitHub的问题(12)。

无论如何,这个谜团已经正式解决。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章