Как зарегистрировать индивидуальный код статуса http для колбы? - PullRequest
0 голосов
/ 10 июня 2019

Я хочу добавить свой собственный код статуса http в свое приложение Flask. Вот мой код:

from werkzeug import exceptions

class UnrecognizedParametersOrCombination(exceptions.HTTPException):
    code = 460
    description = 'The query parameters or their combination are not recognized!'


exceptions.default_exceptions[460] = UnrecognizedParametersOrCombination

Но когда я звоню abort(460), я получаю сообщение об ошибке: LookupError: no exception for 460

Кажется, я не правильно зарегистрировал новое исключение в исключениях werkzeug по умолчанию. Официальный документ довольно размыт в этой части. Как мне это сделать?

Ответы [ 3 ]

0 голосов
/ 10 июня 2019

Пробовал прерывать отображение?

abort.mappings[460] = UnrecognizedParametersOrCombination

0 голосов
/ 10 июня 2019

Вам не следует этого делать, так как вы нарушите RFC, связанные с кодами состояния HTTP.Коды состояния HTTP должны быть универсальными и не должны использоваться неправильно.Я бы порекомендовал ответить на некоторые JSON, например, «status»: «460», если вы хотите использовать свои собственные коды отладки, просто не используйте их в качестве HTTP-ответов.

0 голосов
/ 10 июня 2019

ОК, я понял это. Согласно документу: http://flask.pocoo.org/docs/1.0/errorhandling/ Это не выполнимо. Что мы можем сделать, так это определить исключение и raise() вместо abort(). Кажется, теперь werkzeug больше не поддерживает регистрацию настроенного кода состояния http в своих исключениях по умолчанию ...

Итак, теперь мой рабочий код:

from werkzeug import exceptions

class UnrecognizedParametersOrCombination(exceptions.HTTPException):
    code = 460
    description = 'The query parameters or their combination are not recognized!'


def handle_460(e):
    return render_template('460.html')


app.register_error_handler(UnrecognizedParametersOrCombination, handle_460)

И теперь мне нужно использовать raise UnrecognizedParametersOrCombination() вместо abort(460) для ответа. Итак, ответом является 200 вместо неофициально поддерживаемых 460.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...