全部,我正在尝试使用Flask-Restful,the docs之后引发自定义错误。出于测试目的,我已经在文档中api = flask_restful.Api(app, errors=errors)
定义并注册了错误词典。
但是,当我想在资源模块中使用(例如)abort(409)
引发自定义错误时,firebug报告:
{ “消息”:“冲突”, “地位”:409 }
这似乎是标准的409错误,没有定制;从文档中,我希望自定义错误消息 - “具有该用户名的用户已存在。”
我想我错过了一些关于错误提升的事情。我应该以任何方式使用字典密钥吗?尽管我尝试过,但查看Flask-Restful源代码并没有帮助。
答案 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非常有用