Исключения Django¶
Django вызывает некоторые собственные исключения, а также стандартные исключения Python.
Исключения ядра Django¶
Классы исключений ядра Django определены в django.core.exceptions
.
AppRegistryNotReady
¶
-
exception
AppRegistryNotReady
[исходный код]¶ Это исключение возникает при попытке использовать модели до завершения процедуры app loading process, которая инициализирует ORM.
ObjectDoesNotExist
¶
-
exception
ObjectDoesNotExist
[исходный код]¶ Базовый класс для
Model.DoesNotExist
исключений. Классtry/except
дляObjectDoesNotExist
будет ловитьDoesNotExist
исключения для всех моделей.См.
get()
.
EmptyResultSet
¶
-
exception
EmptyResultSet
[исходный код]¶ EmptyResultSet
может возникнуть во время генерации запроса, если запрос не вернет никаких результатов. Большинство проектов Django не столкнутся с этим исключением, но оно может быть полезно для реализации пользовательских поисков и выражений.
FieldDoesNotExist
¶
-
exception
FieldDoesNotExist
[исходный код]¶ Исключение
FieldDoesNotExist
вызывается методом_meta.get_field()
модели, когда запрашиваемое поле не существует ни в модели, ни в родителях модели.
MultipleObjectsReturned
¶
-
exception
MultipleObjectsReturned
[исходный код]¶ Базовый класс для
Model.MultipleObjectsReturned
исключений. Классtry/except
дляMultipleObjectsReturned
будет ловитьMultipleObjectsReturned
исключения для всех моделей.См.
get()
.
SuspiciousOperation
¶
-
exception
SuspiciousOperation
[исходный код]¶ Исключение
SuspiciousOperation
возникает, когда пользователь выполнил операцию, которую следует считать подозрительной с точки зрения безопасности, например, подделка куки сеанса. ПодклассыSuspiciousOperation
включают:DisallowedHost
DisallowedModelAdminLookup
DisallowedModelAdminToField
DisallowedRedirect
InvalidSessionKey
RequestDataTooBig
SuspiciousFileOperation
SuspiciousMultipartForm
SuspiciousSession
TooManyFieldsSent
Если исключение
SuspiciousOperation
достигает уровня обработчика ASGI/WSGI, оно регистрируется на уровнеError
и приводит к появлениюHttpResponseBadRequest
. Дополнительную информацию см. в logging documentation.
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
возникает, когда возникает проблема с полем модели. Это может произойти по нескольким причинам:- Поле в модели конфликтует с одноименным полем из абстрактного базового класса
- Бесконечный цикл возникает при заказе
- Ключевое слово не может быть разобрано из параметров фильтра
- Поле не может быть определено по ключевому слову в параметрах запроса
- Объединение не разрешено для указанного поля
- Имя поля является недопустимым
- Запрос содержит недопустимые аргументы order_by
ValidationError
¶
-
exception
ValidationError
[исходный код]¶ Исключение
ValidationError
возникает, когда данные не проходят валидацию полей формы или модели. Подробнее о валидации см. в Form and Field Validation, Model Field Validation и Validator Reference.
BadRequest
¶
-
exception
BadRequest
[исходный код]¶ - New in Django 3.2.
Исключение
BadRequest
возникает, когда запрос не может быть обработан из-за ошибки клиента. Если исключениеBadRequest
достигает уровня обработчика ASGI/WSGI, оно приводит к возникновениюHttpResponseBadRequest
.
RequestAborted
¶
-
exception
RequestAborted
[исходный код]¶ Исключение
RequestAborted
возникает, когда HTTP-тело, считываемое обработчиком, обрывается на середине пути и клиентское соединение закрывается, или когда клиент не отправляет данные и достигает тайм-аута, при котором сервер закрывает соединение.Он является внутренним для модулей обработчика HTTP, и вы вряд ли увидите его где-либо еще. Если вы модифицируете код обработки HTTP, вам следует вызывать это сообщение, когда вы столкнулись с прерванным запросом, чтобы убедиться, что сокет закрыт чисто.
SynchronousOnlyOperation
¶
-
exception
SynchronousOnlyOperation
[исходный код]¶ Исключение
SynchronousOnlyOperation
возникает, когда код, допустимый только в синхронном коде Python, вызывается из асинхронного контекста (потока с запущенным асинхронным циклом событий). Эти части Django в целом сильно зависят от потокобезопасности для функционирования и не работают корректно в корутинах, разделяющих один и тот же поток.Если вы пытаетесь вызвать код, который является только синхронным, из асинхронного потока, то создайте синхронный поток и вызывайте его в нем. Этого можно добиться с помощью
asgiref.sync.sync_to_async()
.
Исключения из URL-резольвера¶
Исключения URL Resolver определены в django.urls
.
Resolver404
¶
-
exception
Resolver404
[исходный код]¶ Исключение
Resolver404
вызываетсяresolve()
, если путь, переданный вresolve()
, не отображается на представление. Это подклассdjango.http.Http404
.
NoReverseMatch
¶
-
exception
NoReverseMatch
[исходный код]¶ Исключение
NoReverseMatch
вызываетсяdjango.urls
, когда подходящий URL в вашей URLconf не может быть идентифицирован на основе предоставленных параметров.
Исключения из базы данных¶
Исключения из базы данных могут быть импортированы из 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 v2.0.
Как и в случае PEP 3134, атрибут __cause__
устанавливается с исходным (базовым) исключением базы данных, позволяя получить доступ к любой дополнительной информации.
-
exception
models.
ProtectedError
¶
Возникает для предотвращения удаления ссылающихся объектов при использовании django.db.models.PROTECT
. models.ProtectedError
является подклассом IntegrityError
.
-
exception
models.
RestrictedError
¶
Возникает для предотвращения удаления ссылающихся объектов при использовании django.db.models.RESTRICT
. models.RestrictedError
является подклассом IntegrityError
.
Исключения HTTP¶
Исключения HTTP могут быть импортированы из django.http
.
UnreadablePostError
¶
-
exception
UnreadablePostError
[исходный код]¶ UnreadablePostError
возникает, когда пользователь отменяет загрузку.
Исключения из сессий¶
Исключения сессий определены в django.contrib.sessions.exceptions
.
SessionInterrupted
¶
-
exception
SessionInterrupted
[исходный код]¶ - New in Django 3.2.
SessionInterrupted
возникает, когда сессия уничтожается в параллельном запросе. Он является подклассомBadRequest
.
Исключения транзакций¶
Исключения транзакций определены в django.db.transaction
.
TransactionManagementError
¶
-
exception
TransactionManagementError
[исходный код]¶ TransactionManagementError
поднимается для любых и всех проблем, связанных с транзакциями базы данных.
Исключения в системе тестирования¶
Исключения, предоставляемые пакетом django.test
.
RedirectCycleError
¶
-
exception
client.
RedirectCycleError
¶ RedirectCycleError
поднимается, когда тестовый клиент обнаруживает цикл или слишком длинную цепочку перенаправлений.
Исключения в Python¶
Django также поднимает встроенные исключения Python, когда это необходимо. Более подробную информацию о Built-in Exceptions смотрите в документации Python.