Spec-Zone.ru › Werkzeug 2.1

Исключения HTTP

Реализует ряд исключений Python, которые могут быть подняты из представления для запуска стандартного HTTP ответа, отличного от 200.

Пример использования

from werkzeug.wrappers.request import Request
from werkzeug.exceptions import HTTPException, NotFound

def view(request):
    raise NotFound()

@Request.application
def application(request):
    try:
        return view(request)
    except HTTPException as e:
        return e

Как видно из этого примера, эти исключения являются вызываемыми WSGI приложениями. Однако они не являются объектами ответа Werkzeug. Вы можете получить объект ответа, вызвав get_response() для исключения HTTP.

Помните, что вам может потребоваться передать среду (WSGI) или область (ASGI) в get_response(), так как некоторые ошибки извлекают дополнительную информацию, относящуюся к запросу.

Если вы хотите подключить другую страницу обработки исключений, например, для кода состояния 404, вы можете добавить второй блок except для конкретного подкласса ошибки:

@Request.application
def application(request):
    try:
        return view(request)
    except NotFound as e:
        return not_found(request)
    except HTTPException as e:
        return e

Классы ошибок

В Werkzeug существуют следующие классы ошибок:

exception werkzeug.exceptions.BadRequest(description=None, response=None)

400 Bad Request

Вызывается, если браузер отправляет что-то приложению или серверу, с чем приложение или сервер не могут справиться.

Параметры
  • description (Optional[str]) –
  • response (Optional[Response]) –
Тип возвращаемого значения

None

exception werkzeug.exceptions.Unauthorized(description=None, response=None, www_authenticate=None)

401 Unauthorized

Вызывается, если пользователь не авторизован для доступа к ресурсу.

Аргумент www_authenticate должен использоваться для установки заголовка WWW-Authenticate. Это используется для HTTP basic auth и других схем. Используйте WWWAuthenticate для создания правильно отформатированных значений. Строго говоря, ответ 401 некорректен, если он не предоставляет по крайней мере одно значение для этого заголовка, хотя реальные клиенты обычно об этом не беспокоятся.

Параметры
  • description (Optional[str]) – Переопределяет сообщение по умолчанию, используемое для тела ответа.
  • www-authenticate – Одно значение или список значений для заголовка(ов) WWW-Authenticate.
  • response (Optional[Response]) –
  • www_authenticate (Optional[Union[WWWAuthenticate, Iterable[WWWAuthenticate]]]) –
Тип возвращаемого значения

None

Журнал изменений

Изменено в версии 2.0: Сериализация нескольких элементов www_authenticate в несколько заголовков WWW-Authenticate, а не объединение их в одно значение, для лучшей совместимости.

Изменено в версии 0.15.3: Если аргумент www_authenticate не задан, заголовок WWW-Authenticate не устанавливается.

Изменено в версии 0.15.3: Аргумент response был восстановлен.

Изменено в версии 0.15.1: description был перемещен обратно в качестве первого аргумента, восстанавливая его предыдущее положение.

Изменено в версии 0.15.0: www_authenticate был добавлен в качестве первого аргумента, перед description.

exception werkzeug.exceptions.Forbidden(description=None, response=None)

403 Forbidden

Вызывается, если у пользователя нет разрешения на доступ к запрашиваемому ресурсу, но он был аутентифицирован.

Параметры
  • description (Optional[str]) –
  • response (Optional[Response]) –
Тип возвращаемого значения

None

exception werkzeug.exceptions.NotFound(description=None, response=None)

404 Not Found

Вызывается, если ресурс не существует и никогда не существовал.

Параметры
  • description (Optional[str]) –
  • response (Optional[Response]) –
Тип возвращаемого значения

None

exception werkzeug.exceptions.MethodNotAllowed(valid_methods=None, description=None, response=None)

405 Method Not Allowed

Вызывается, если сервер использует метод, который ресурс не обрабатывает. Например, POST если ресурс только для просмотра. Особенно полезно для REST.

Первый аргумент для этой исключительной ситуации должен быть списком разрешённых методов. Строго говоря, ответ будет некорректным, если вы не предоставите допустимые методы в заголовке, что вы можете сделать с этим списком.

Принимает необязательный список допустимых http-методов, начиная с Werkzeug 0.3 этот список будет обязательным.

Параметры
  • valid_methods (Optional[Iterable[str]]) –
  • description (Optional[str]) –
  • response (Optional[Response]) –
Тип возвращаемого значения

None

exception werkzeug.exceptions.NotAcceptable(description=None, response=None)

406 Not Acceptable

Вызывается, если сервер не может вернуть какой-либо контент, соответствующий заголовкам Accept клиента.

Параметры
  • description (Optional[str]) –
  • response (Optional[Response]) –
Тип возвращаемого значения

None

exception werkzeug.exceptions.RequestTimeout(description=None, response=None)

408 Request Timeout

Вызывается для сигнализации о таймауте.

Параметры
  • description (Optional[str]) –
  • response (Optional[Response]) –
Тип возвращаемого значения

None

exception werkzeug.exceptions.Conflict(description=None, response=None)

409 Conflict

Вызвать, чтобы указать, что запрос не может быть выполнен, так как он конфликтует с текущим состоянием на сервере.

Журнал изменений

Добавлена в версии 0.7.

Параметры
  • description (Optional[str]) –
  • response (Optional[Response]) –
Тип возвращаемого значения

None

exception werkzeug.exceptions.Gone(description=None, response=None)

410 Gone

Вызвать, если ресурс существовал ранее и исчез без нового местоположения.

Параметры
  • description (Optional[str]) –
  • response (Optional[Response]) –
Тип возвращаемого значения

None

exception werkzeug.exceptions.LengthRequired(description=None, response=None)

411 Length Required

Вызвать, если браузер передал данные, но нет заголовка Content-Length, который необходим для обработки сервером.

Параметры
  • description (Optional[str]) –
  • response (Optional[Response]) –
Тип возвращаемого значения

None

exception werkzeug.exceptions.PreconditionFailed(description=None, response=None)

412 Precondition Failed

Код состояния, используемый в сочетании с If-Match, If-None-Match, или If-Unmodified-Since.

Параметры
  • description (Optional[str]) –
  • response (Optional[Response]) –
Тип возвращаемого значения

None

exception werkzeug.exceptions.RequestEntityTooLarge(description=None, response=None)

413 Request Entity Too Large

Код состояния, который следует возвращать, если переданные данные превысили заданный лимит.

Параметры
  • description (Optional[str]) –
  • response (Optional[Response]) –
Тип возвращаемого значения

None

exception werkzeug.exceptions.RequestURITooLarge(description=None, response=None)

414 Request URI Too Large

Подобно 413, но для слишком длинных URL.

Параметры
  • description (Optional[str]) –
  • response (Optional[Response]) –
Тип возвращаемого значения

None

exception werkzeug.exceptions.UnsupportedMediaType(description=None, response=None)

415 Unsupported Media Type

Код состояния, возвращаемый, если сервер не может обработать тип носителя, переданный клиентом.

Параметры
  • description (Optional[str]) –
  • response (Optional[Response]) –
Тип возвращаемого значения

None

exception werkzeug.exceptions.RequestedRangeNotSatisfiable(length=None, units='bytes', description=None, response=None)

416 Requested Range Not Satisfiable

Клиент запросил неверную часть файла.

Журнал изменений

Добавлена в версии 0.7.

Принимает необязательное значение заголовка Content-Range на основе параметра length.

Параметры
  • length (Optional[int]) –
  • units (str) –
  • description (Optional[str]) –
  • response (Optional[Response]) –
Тип возвращаемого значения

None

exception werkzeug.exceptions.ExpectationFailed(description=None, response=None)

417 Expectation Failed

Сервер не может выполнить требования заголовка Expect запроса.

Журнал изменений

Добавлена в версии 0.7.

Параметры
  • description (Optional[str]) –
  • response (Optional[Response]) –
Тип возвращаемого значения

None

exception werkzeug.exceptions.ImATeapot(description=None, response=None)

418 I’m a teapot

Сервер должен вернуть это значение, если это чайник, и кто-то пытался сварить на нём кофе.

Changelog

Новое в версии 0.7.

Параметры
  • description (Optional[str]) –
  • response (Optional[Response]) –
Тип возвращаемого значения

None

exception werkzeug.exceptions.UnprocessableEntity(description=None, response=None)

422 Unprocessable Entity

Используется, если запрос правильно сформирован, но инструкция некорректна.

Параметры
  • description (Optional[str]) –
  • response (Optional[Response]) –
Тип возвращаемого значения

None

exception werkzeug.exceptions.Locked(description=None, response=None)

423 Locked

Используется, если к ресурсу, к которому осуществляется доступ, применён блокировка.

Параметры
  • description (Optional[str]) –
  • response (Optional[Response]) –
Тип возвращаемого значения

None

exception werkzeug.exceptions.FailedDependency(description=None, response=None)

424 Failed Dependency

Используется, если метод не может быть выполнен над ресурсом, потому что запрашиваемое действие зависит от другого действия, которое не удалось выполнить.

Параметры
  • description (Optional[str]) –
  • response (Optional[Response]) –
Тип возвращаемого значения

None

exception werkzeug.exceptions.PreconditionRequired(description=None, response=None)

428 Precondition Required

Сервер требует, чтобы этот запрос был условным, обычно для предотвращения проблемы с потерянными обновлениями, которая представляет собой состояние гонки между двумя или более клиентами, пытающимися обновить ресурс через PUT или DELETE. Требуя от каждого клиента включать заголовок условия («If-Match» или «If-Unmodified-Since») со значением, сохранённым из недавнего запроса GET, сервер гарантирует, что каждый клиент по крайней мере видел предыдущую версию ресурса.

Параметры
  • description (Optional[str]) –
  • response (Optional[Response]) –
Тип возвращаемого значения

None

exception werkzeug.exceptions.TooManyRequests(description=None, response=None, retry_after=None)

429 Too Many Requests

Сервер ограничивает скорость, с которой этот пользователь получает ответы, и этот запрос превышает эту скорость. (Сервер может использовать любой удобный метод для идентификации пользователей и их скоростей запросов). Сервер может включить заголовок «Retry-After», чтобы указать, сколько времени пользователю следует подождать перед повторной попыткой.

Параметры
  • retry_after (Optional[Union[datetime.datetime, int]]) – Если задано, установите заголовок Retry-After в это значение. Может быть целым числом int секунд или значением datetime.
  • description (Optional[str]) –
  • response (Optional[Response]) –
Тип возвращаемого значения

None

Changelog

Изменено в версии 1.0: Добавлен параметр retry_after.

exception werkzeug.exceptions.RequestHeaderFieldsTooLarge(description=None, response=None)

431 Request Header Fields Too Large

Сервер отказывается обрабатывать запрос, потому что поля заголовков слишком велики. Одно или несколько отдельных полей могут быть слишком большими, или набор всех заголовков слишком большой.

Параметры
  • description (Optional[str]) –
  • response (Optional[Response]) –
Тип возвращаемого значения

None

exception werkzeug.exceptions.UnavailableForLegalReasons(description=None, response=None)

451 Unavailable For Legal Reasons

Этот код состояния указывает, что сервер отказывается предоставить доступ к ресурсу в результате юридического требования.

Параметры
  • description (Optional[str]) –
  • response (Optional[Response]) –
Тип возвращаемого значения

None

exception werkzeug.exceptions.InternalServerError(description=None, response=None, original_exception=None)

500 Internal Server Error

Вызвать, если произошла внутренняя ошибка сервера. Это хороший вариант по умолчанию, если в диспетчере произошла неизвестная ошибка.

Changelog

Изменено в версии 1.0.0: Добавлен атрибут original_exception.

Параметры
  • description (Optional[str]) –
  • response (Optional[Response]) –
  • original_exception (Optional[BaseException]) –
Тип возвращаемого значения

None

original_exception

Исходное исключение, вызвавшее эту ошибку 500. Может быть использовано фреймворками для предоставления контекста при обработке неожиданных ошибок.

exception werkzeug.exceptions.NotImplemented(description=None, response=None)

501 Not Implemented

Вызвать, если приложение не поддерживает действие, запрошенное браузером.

Параметры
  • description (Optional[str]) –
  • response (Optional[Response]) –
Тип возвращаемого значения

None

exception werkzeug.exceptions.BadGateway(description=None, response=None)

502 Bad Gateway

Если в вашем приложении используется проксирование, верните этот код состояния, если вы получили недействительный ответ от сервера-источника, к которому обращался сервер при попытке выполнить запрос.

Параметры
  • description (Optional[str]) –
  • response (Optional[Response]) –
Тип возвращаемого значения

None

exception werkzeug.exceptions.ServiceUnavailable(description=None, response=None, retry_after=None)

503 Service Unavailable

Код состояния, который следует возвращать, если служба временно недоступна.

Параметры
  • retry_after (Optional[Union[datetime.datetime, int]]) – Если задано, установите заголовок Retry-After на это значение. Может быть целым числом секунд или датой и временем.
  • description (Optional[str]) –
  • response (Optional[Response]) –
Тип возвращаемого значения

None

Changelog

Изменено в версии 1.0: Добавлен параметр retry_after.

exception werkzeug.exceptions.GatewayTimeout(description=None, response=None)

504 Gateway Timeout

Код состояния, который следует возвращать, если соединение с сервером-источником истекло.

Параметры
  • description (Optional[str]) –
  • response (Optional[Response]) –
Тип возвращаемого значения

None

exception werkzeug.exceptions.HTTPVersionNotSupported(description=None, response=None)

505 HTTP Version Not Supported

Сервер не поддерживает версию HTTP, используемую в запросе.

Параметры
  • description (Optional[str]) –
  • response (Optional[Response]) –
Тип возвращаемого значения

None

exception werkzeug.exceptions.ClientDisconnected(description=None, response=None)

Внутреннее исключение, которое генерируется, если Werkzeug обнаруживает отключение клиента. Поскольку клиент уже ушел, попытка отправить сообщение об ошибке клиенту может не сработать и в конечном итоге привести к другой ошибке на сервере. В основном это здесь для того, чтобы его по умолчанию игнорировал Werkzeug.

Поскольку отключения невозможно надежно обнаружить, а WSGI их не определяет, это исключение может или не может генерироваться, если клиент ушел.

Changelog

Добавлено в версии 0.8.

Параметры
  • description (Optional[str]) –
  • response (Optional[Response]) –
Тип возвращаемого значения

None

exception werkzeug.exceptions.SecurityError(description=None, response=None)

Вызывается, если происходит ошибка безопасности. В ином случае это точно такая же ошибка неправильного запроса.

Журнал изменений

Новая в версии 0.9.

Параметры
  • description (Optional[str]) –
  • response (Optional[Response]) –
Тип возвращаемого значения

None

Базовый класс

Все исключения реализуют этот общий интерфейс:

exception werkzeug.exceptions.HTTPException(description=None, response=None)

Базовый класс для всех исключений HTTP. Это исключение может вызываться как WSGI-приложение для отображения страницы с ошибкой по умолчанию, или вы можете перехватывать подклассы для отображения более удобных сообщений об ошибках.

Изменено в версии 2.1: Удален метод класса wrap.

Параметры
  • description (Optional[str]) –
  • response (Optional[Response]) –
Тип возвращаемого значения

None

__call__(environ, start_response)

Вызов исключения как WSGI-приложения.

Параметры
  • environ (WSGIEnvironment) – окружение WSGI.
  • start_response (StartResponse) – вызываемая функция ответа, предоставленная WSGI-сервером.
Тип возвращаемого значения

Iterable[bytes]

get_response(environ=None, scope=None)

Получение объекта ответа. Если он был передан в исключение, он возвращается напрямую.

Параметры
  • environ (Optional[Union[WSGIEnvironment, WSGIRequest]]) – необязательное окружение для запроса. Это может использоваться для изменения ответа в зависимости от того, как выглядел запрос.
  • scope (Optional[dict]) –
Возвращаемое значение

объект Response или его подкласс.

Тип возвращаемого значения

Response

Особые исключения HTTP

Начиная с Werkzeug 0.3 некоторые встроенные классы вызывают исключения, которые выглядят как обычные исключения Python (например, KeyError), но одновременно являются исключениями HTTP BadRequest. Это решение было принято для упрощения распространённой ситуации, когда нужно прервать выполнение, если клиент произвёл изменения в данных формы, которые приложение не может обработать должным образом, и должно завершиться с 400 BAD REQUEST.

Предполагая, что приложение перехватывает все исключения HTTP и должным образом реагирует на них, функция представления может безопасно выполнить следующее и не должна проверять наличие ключей:

def new_post(request):
    post = Post(title=request.form['title'], body=request.form['body'])
    post.save()
    return redirect(post.url)

Если title или body отсутствуют в форме, будет вызвано специальное исключение KeyError, которое ведёт себя как KeyError, но также является исключением BadRequest.

exception werkzeug.exceptions.BadRequestKeyError(arg=None, *args, **kwargs)

Исключение, используемое для сигнализации как KeyError, так и BadRequest. Используется во многих структурах данных.

Параметры
  • arg (Optional[str]) –
  • args (Any) –
  • kwargs (Any) –

Простое прерывание

Иногда удобно просто вызвать исключение по коду ошибки, не импортируя само исключение и не ища его имя. Для этой цели существует функция abort().

werkzeug.exceptions.abort(status, *args, **kwargs)

Вызывает HTTPException для заданного кода состояния или WSGI-приложения.

Если задан код состояния, он будет найден в списке исключений, и это исключение будет вызвано. Если передано WSGI-приложение, оно будет обернуто в прокси-исключение WSGI и вызвано:

abort(404)  # 404 Not Found
abort(Response('Hello World'))
Параметры
  • status (Union[int, Response]) –
  • args (Any) –
  • kwargs (Any) –
Тип возвращаемого значения

te.NoReturn

Если вы хотите использовать эту функциональность с пользовательскими исключениями, вы можете создать экземпляр класса aborter:

class werkzeug.exceptions.Aborter(mapping=None, extra=None)

При передаче словаря code -> exception items, он может использоваться как вызываемый объект, который вызывает исключения. Если первым аргументом вызываемого объекта является целое число, оно будет найдено в отображении, если это WSGI-приложение, оно будет вызвано в прокси-исключении.

Остальные аргументы передаются конструктору исключения.

Параметры
  • mapping (Optional[Dict[int, Type[werkzeug.exceptions.HTTPException]]]) –
  • extra (Optional[Dict[int, Type[werkzeug.exceptions.HTTPException]]]) –
Тип возвращаемого значения

None

Пользовательские ошибки

Как видно из списка выше, не все коды состояния доступны в качестве ошибок. Особенно отсутствуют перенаправления и другие коды состояния, отличные от 200, которые не представляют собой ошибки. Для перенаправлений вы можете использовать функцию redirect() из утилит.

Если вы хотите добавить свою собственную ошибку, вы можете наследовать от HTTPException:

from werkzeug.exceptions import HTTPException

class PaymentRequired(HTTPException):
    code = 402
    description = '<p>Payment required.</p>'

Это минимальный код, необходимый для собственного исключения. Если вы хотите добавить больше логики к ошибкам, вы можете переопределить методы get_description(), get_body(), get_headers() и get_response(). В любом случае вы должны посмотреть исходный код модуля исключений.

Вы можете переопределить стандартное описание в конструкторе с помощью параметра description:

raise BadRequest(description='Request failed because X was not present')

© 2007–2022 Pallets
Licensed under the BSD 3-clause License.
https://werkzeug.palletsprojects.com/en/2.1.x/exceptions/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API