• 3.1
  • 3.2
  • 6.1
  • Версия документации: 5.0

Исключения Django

Django вызывает несколько собственных исключений на ряду со стандартными исключениями Python.

Основные исключения Django

Основные исключения Django определены в django.core.exceptions.

AppRegistryNotReady

exception AppRegistryNotReady

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

ObjectDoesNotExist

exception ObjectDoesNotExist

Базовый класс для исключений Model.DoesNotExist. try/Exception для ObjectDoesNotExist перехватывает исключения DoesNotExist для всех моделей.

См. get().

EmptyResultSet

exception EmptyResultSet

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

ПолныйНабор Результатов

exception FullResultSet

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

FieldDoesNotExist

exception FieldDoesNotExist

Исключение FieldDoesNotExist вызывается методом _meta.get_field() модели, если запрошенное поле не найдено в модели или в предках модели.

MultipleObjectsReturned

exception MultipleObjectsReturned

Базовый класс для исключений Model.MultipleObjectsReturned. try/Exception для MultipleObjectsReturned перехватывает исключения MultipleObjectsReturned для всех моделей.

См. get().

SuspiciousOperation

exception SuspiciousOperation

Исключение SuspiciousOperation вызывается когда пользователь выполнил операцию, которая должна быть рассмотрена как подозрительная с точки зрения безопасности, например, при подмене куки сессии. Подклассы SuspiciousOperation:

  • DisallowedHost

  • DisallowedModelAdminLookup

  • DisallowedModelAdminToField

  • DisallowedRedirect

  • InvalidSessionKey

  • RequestDataTooBig

  • SuspiciousFileOperation

  • SuspiciousMultipartForm

  • SuspiciousSession

  • TooManyFieldsSent

  • TooManyFilesSent

Если исключение SuspiciousOperation достигает уровня обработчика ASGI/WSGI, оно регистрируется на уровне Error и приводит к возникновению HttpResponseBadRequest. Дополнительную информацию смотрите в документации по журналированию.

PermissionDenied

exception PermissionDenied

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

ViewDoesNotExist

exception ViewDoesNotExist

Исключение ViewDoesNotExist вызывается модулем django.urls, если запрошенное представление на найдено.

MiddlewareNotUsed

exception MiddlewareNotUsed

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

ImproperlyConfigured

exception ImproperlyConfigured

Исключение ImproperlyConfigured вызывается, если Django неправильно сконфигурировано. Например, если значение в settings.py неправильное.

FieldError

exception FieldError

Исключение FieldError вызывается, если существует проблема с полем модели. Такое может произойти по следующим причинам:

  • Поле в модели конфликтует с полем абстрактного класса, которое имеет такое же имя.

  • Бесконечный цикл, вызванный сортировкой.

  • Аргумент не может быть получен из параметров фильтра.

  • Поле не может быть определено из аргумента в параметрах запроса.

  • Объединение не разрешено для указанного поля.

  • Имя поля неверное.

  • Запрос состоит из неверного порядка аргументов.

ValidationError

exception ValidationError

Исключение ValidationError вызывается, если происходит ошибка проверки данных от формы или модели. Для подробностей о проверке данных, см. Проверка форм и полей, Проверка поля модели и the Справочник проверки.

NON_FIELD_ERRORS

NON_FIELD_ERRORS

ValidationError, которые не относятся ни к одному из полей формы или модели, классифицируются как NON_FIELD_ERRORS. Эта константа определяет ключ в словаре ошибок.

BadRequest

exception BadRequest

Исключение BadRequest возникает, когда запрос не может быть обработан из-за ошибки клиента. Если исключение BadRequest достигает уровня обработчика ASGI/WSGI, это приводит к возникновению HttpResponseBadRequest.

RequestDataTooBig

exception RequestAborted

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

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

SuspiciousOperation

exception SynchronousOnlyOperation

Исключение SynchronousOnlyOperation возникает, когда код, который разрешен только в синхронном коде Python, вызывается из асинхронного контекста (потока с работающим асинхронным циклом событий). Функционирование этих частей Django, как правило, сильно зависит от потокобезопасности и не работает корректно в сопрограммах, использующих один и тот же поток.

Если вы пытаетесь вызвать код, который является только синхронным, из асинхронного потока, создайте синхронный поток и вызовите его в нем. Вы можете сделать это с помощью asgiref.sync.sync_to_async().

Ошибки определения URL

Ошибки определения URL определены в django.urls.

Resolver404

exception Resolver404

Исключение Resolver404 вызывается в resolve(), если путь переданный в resolve() не соответствует ни одному представлению. Подкласс django.http.Http404.

NoReverseMatch

exception NoReverseMatch

Исключение NoReverseMatch вызывается модулем django.urls, если не получилось найти соответствующий URL по переданным параметрам.

Исключения базы данных

Ошибки базы данных определены в django.db.

Django оборачивает стандартные исключения базы данных таким образом, что код Django гарантирует стандартную реализацию этих классов.

exception Error
exception InterfaceError
exception DatabaseError
exception DataError
exception OperationalError
exception IntegrityError
exception InternalError
exception ProgrammingError
exception NotSupportedError

Обёртка Django для исключений базы данных ведёт себя аналогично обёртываемым исключениям. См. PEP 249, вторую версию Python Database API Specification, для подробностей.

В соответствии с PEP 3134 атрибут __cause__ содержит изначальное исключение базы данных, предоставляя доступ к дополнительной информации.

exception models.ProtectedError

Выбрасывается для предотвращения удаления связанных объектов при использовании django.db.models.PROTECT. models.ProtectedError`является дочерним классом :exc:`IntegrityError.

exception models.RestrictedError

Поднят для предотвращения удаления объектов, на которые имеются ссылки, при использовании django.db.models.RESTRICT. models.RestrictedError является подклассом IntegrityError.

HTTP-исключения

Исключения HTTP можно импортировать из django.http.

UnreadablePostError

exception UnreadablePostError

Исключение UnreadablePostError выбрасывается когда пользователь прерывает закачку файла.

Исключения сеансов

Исключения сеансов определены в django.contrib.sessions.Exceptions.

Сессия прервана

exception SessionInterrupted

SessionInterrupted возникает, когда сеанс уничтожается в параллельном запросе. Это подкласс BadRequest.

Исключения транзакций

Ошибки транзакции определены в django.db.transaction.

TransactionManagementError

exception TransactionManagementError

Исключение TransactionManagementError вызывается для всех проблем с транзакциями в базе данных.

Исключения, используемые в тестах

Ошибки HTTP определенны в django.test.

RedirectCycleError

exception client.RedirectCycleError

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

Исключения Python

Django вызывает встроенные исключения Python когда это требуется. Обратитесь к документации Python для получения более подробной информации bltin-exceptions.

Back to Top