13

所有,我正在尝试使用 Flask-Restful 引发自定义错误,遵循docs。出于测试目的,我在文档中定义并注册了错误字典的确切链接:api = flask_restful.Api(app, errors=errors).

但是,当我想abort(409)在资源模块中使用(例如)引发自定义错误时,萤火虫报告:

{“消息”:“冲突”,“状态”:409 }

这似乎是标准的 409 错误,没有自定义;从文档中,我希望自定义错误消息 - “具有该用户名的用户已经存在。”

我想我遗漏了一些关于错误本身的提升。我应该以任何方式使用字典键吗?尽管我尝试过,但查看 Flask-Restful 源代码并没有帮助。

4

1 回答 1

19

要使用Flask-RESTful为标准HTTP 状态代码定义消息,您必须重新定义Werkzeug提供的 HTTP 异常之一,Flask正是基于该异常。

根据您的问题,这是一个覆盖Conflict异常的示例:

errors = {
    'Conflict': {
        'message': "A user with that username already exists.",
        'status': 409,
    },
}

app = Flask(__name__)
api = flask_restful.Api(app, errors=errors)

因此,每次您调用 时abort(409),都会返回正确媒体类型的表示,并带有定义的消息。

但是,通过使用此方法,在任何地方您都将使用状态代码中止409,这将返回有关用户名已存在的用户的消息。abort(409)当您在处理用户以外的其他资源的视图中调用时,这不太可能是您想要的。

因此,我建议您每次想要提供自定义消息时,只需使用Flask-RESTfulabort的方法如下:

from flask.ext.restful import abort

abort(409, description="A user with that username already exists.")

一般来说,通过定义自定义错误消息来扩展 Flask-RESTful 在您引发不在Werkzeug 提供的HTTP 异常raise()中的自定义异常(with , not abort())时很有用。

于 2015-03-24T10:35:24.700 回答