Для возврата ответа 400/500
клиентам в веб-приложении flask
я видел следующие соглашения:
Прервать
import flask
def index(arg):
return flask.abort("Invalid request", 400)
Кортеж
def index(arg):
return ("Invalid request", 400)
Ответ
import flask
def index(arg):
return flask.Response("Invalid request", 400)
В чем разница и когда один из них предпочтительнее?
Смежный вопрос
Исходя из Java/Spring
, я привык определять Пользовательское исключение с кодом состояния, связанным с ним, и затем каждый раз, когда приложение выдает это исключение, ответ с этим кодом состояния автоматически возвращается пользователю (вместо того, чтобы явно его перехватить и вернуть ответ, как показано выше). Это возможно в flask
? Это моя маленькая завернутая попытка
from flask import Response
class FooException(Exception):
""" Binds optional status code and encapsulates returing Response when error is caught """
def __init__(self, *args, **kwargs):
code = kwargs.pop('code', 400)
Exception.__init__(self)
self.code = code
def as_http_error(self):
return Response(str(self), self.code)
Затем использовать
try:
something()
catch FooException as ex:
return ex.as_http_error()