【问题标题】:Flask - custom error messages on abortFlask - 中止时的自定义错误消息
【发布时间】:2016-05-14 14:07:06
【问题描述】:

我希望能够在 Flask 中使用 abort() 来显示自定义错误消息。我遇到了一个不寻常的情况,我遇到了麻烦。我的代码如下。

from flask import Flask, abort, jsonify, make_response, request

app = Flask(__name__)

@app.errorhandler(400)
def custom400(error):
    return make_response(jsonify({'message': error.description}), 400)

@app.route('/test', methods=['POST'])
def test():
    abort(400, 'custom error message')

if __name__ == '__main__':
    app.run()

上面的代码可以工作,但如果我尝试访问任何表单数据,则行为会有所不同,因为我无法访问自定义错误消息。

def test():
    a = request.form['some_value']
    abort(400, 'custom error message')

如何避免这种情况?这是 Flask 的错误吗?

注意:以上代码取自how to get access to error message from abort command when using custom error handler

【问题讨论】:

  • 您能否澄清“我无法访问自定义错误消息”的意思?
  • 我几乎可以肯定该错误没有描述,因为您没有在 POST 正文中设置 some_value,因此 400 错误来自 request.form.__getitem__ - 如果您更改会发生什么test的第一行到a = request.form.get('some_value')?
  • @SeanVieira - 你是对的!我不知道我访问无效字典对象的尝试导致了 400。您能否发表您的评论作为答案,以便我接受?

标签: python-3.x flask


【解决方案1】:

错误没有描述,因为您没有在 POST 正文中设置 some_value,因此 400 错误来自 request.form.__getitem__ - 将测试的第一行更改为 a = request.form.get('some_value') 和您的 abort 错误将被抛出。

【讨论】:

    【解决方案2】:

    如果您希望能够将模板与错误消息一起呈现,您可以定义错误处理程序

    @app.errorhandler(404)
    def page_not_found(error):
        error=['Page Not Found','Oops']
        return render_template('errors.html', error=error), 404
    

    要使用,请通过

    引发错误
    abort(404)
    

    确保导入中止

    from flask import abort
    

    然后就可以访问jinja中的错误信息列表了

    【讨论】:

    • 那些使用股票错误机制的人可以简单地传入一个额外的参数abort(404,"I don't know what you're up to there but it ain't right")
    猜你喜欢
    • 1970-01-01
    • 2018-04-28
    • 2019-08-11
    • 2014-03-05
    • 1970-01-01
    • 2016-07-27
    • 2013-05-29
    • 2018-03-03
    • 2018-08-12
    相关资源
    最近更新 更多