2016-02-04 6 views
1

Я хотел бы иметь возможность отображать собственные сообщения об ошибках с помощью функции abort() в Flask. Я столкнулся с необычной ситуацией, с которой у меня возникают проблемы. Мой код ниже.Flask - пользовательские сообщения об ошибках при отмене

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') 

Как я могу избежать этой ситуации? Это ошибка в фляге?

Примечание: Приведенный выше код был взят из how to get access to error message from abort command when using custom error handler

+0

Можете ли вы пояснить, что вы подразумеваете под «Я теряю доступ к настраиваемому сообщению об ошибке»? – Oin

+1

Я почти уверен, что ошибка не имеет описания, потому что вы не устанавливаете 'some_value' в свой орган POST, поэтому ошибка 400 возникает из' request.form .__ getitem__' - что произойдет, если вы измените первую строку от 'test' до' a = request.form.get ('some_value') '? –

+0

@SeanVieira - Вы правы! Я понятия не имел, что моя попытка доступа к недействительному объекту словаря привела к 400. Не могли бы вы оставить свой комментарий в качестве ответа, чтобы я мог его принять? –

ответ

1

ошибка не имеет описания, потому что вы не устанавливая some_value в вашем теле POST, так что ошибка 400 происходит от request.form.__getitem__ - изменить первую строку теста до a = request.form.get('some_value'), и вместо этого будет выбрана ваша ошибка abort.

Смежные вопросы