使用Flask-Restful引发自定义错误

时间:2015-01-12 20:47:28

标签: flask flask-restful

全部,我正在尝试使用Flask-Restful,the docs之后引发自定义错误。出于测试目的,我已经在文档中api = flask_restful.Api(app, errors=errors)定义并注册了错误词典。

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

  

{       “消息”:“冲突”,       “地位”:409   }

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

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

1 个答案:

答案 0 :(得分:16)

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

根据您的问题,以下是覆盖Conflict exception

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

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

因此,每当您调用abort(409)时,这将返回正确的mediatype中的表示形式,并返回已定义的消息。

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

因此,我建议您在每次要提供自定义消息时,只需使用 Flask-RESTful abort方法,如下所示:

from flask.ext.restful import abort

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

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