Spec-Zone.ru › Werkzeug 2.3

Исключения 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 (str | None) –
  • response (Response | None) –
Тип возвращаемого значения:

None

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

401 Unauthorized

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

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

Параметры:
  • description (str | None) – Переопределение стандартного сообщения, используемого для тела ответа.
  • www-authenticate – Единственное значение или список значений для заголовка(ов) WWW-Authenticate.
  • response (Response | None) –
  • www_authenticate (None | (WWWAuthenticate | t.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 (str | None) –
  • response (Response | None) –
Тип возвращаемого значения:

None

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

404 Not Found

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

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

None

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

405 Method Not Allowed

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

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

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

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

None

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

406 Not Acceptable

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

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

None

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

408 Request Timeout

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

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

None

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

409 Conflict

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

Изменения

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

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

None

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

410 Gone

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

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

None

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

411 Length Required

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

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

None

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

412 Precondition Failed

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

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

None

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

413 Request Entity Too Large

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

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

None

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

414 Request URI Too Large

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

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

None

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

415 Unsupported Media Type

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

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

None

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

416 Requested Range Not Satisfiable

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

Изменения

Введено в версии 0.7.

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

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

None

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

417 Expectation Failed

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

Изменения

Введено в версии 0.7.

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

None

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

418 I’m a teapot

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

Изменения

Введено в версии 0.7.

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

None

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

422 Unprocessable Entity

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

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

None

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

423 Locked

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

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

None

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

424 Failed Dependency

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

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

None

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

428 Precondition Required

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

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

None

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

429 Too Many Requests

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

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

None

Изменения

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

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

431 Request Header Fields Too Large

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

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

None

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

451 Unavailable For Legal Reasons

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

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

None

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

500 Internal Server Error

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

Изменения

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

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

None

original_exception

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

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

501 Not Implemented

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

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

None

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

502 Bad Gateway

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

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

None

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

503 Service Unavailable

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

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

None

Изменения

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

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

504 Gateway Timeout

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

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

None

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

505 HTTP Version Not Supported

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

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

None

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

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

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

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

Введено в версии 0.8.

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

None

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

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

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

Введено в версии 0.9.

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

None

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

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

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

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

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

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

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

None

__call__(environ, start_response)

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

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

t.Iterable[bytes]

get_response(environ=None, scope=None)

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

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

объект 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, но также как исключение BadRequest.

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

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

Параметры:
  • arg (str | None) –
  • args (t.Any) –
  • kwargs (t.Any) –
END_OF_DOCUMENT_MARKER ```

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

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

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

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

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

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

t.NoReturn

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

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

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

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

Параметры:
  • mapping (dict[int, type[HTTPException]] | None) –
  • extra (dict[int, type[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.3.x/exceptions/

Spec-Zone.ru

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