"" "
Глобальные классы исключений и предупреждений Django.
" ""
Оператор импорта
из django.utils.hashable импорт make_hashable
[docs] class FieldDoesNotExist ( Exception ):
"" "Запрошенное поле модели не существует" ""
пройти
[docs] class AppRegistryNotReady ( Exception ):
"" "Реестр django.apps еще не заполнен" ""
пройти
[docs] class ObjectDoesNotExist ( Exception ):
"" "Запрошенный объект не существует" ""
silent_variable_failure = True
[docs] class MultipleObjectsReturned ( Exception ):
"" "Запрос вернул несколько объектов, хотя ожидался только один." ""
pass
[docs] class SuspiciousOperation ( Exception ):
"" "Пользователь сделал что-то подозрительное" ""
class SuspiciousMultipartForm ( SuspiciousOperation ):
"" "Подозрительный запрос MIME в данных многостраничной формы" ""
пройти
class SuspiciousFileOperation ( SuspiciousOperation ):
"" "Попытка выполнить подозрительную операцию с файловой системой" ""
пройти
class DisallowedHost ( SuspiciousOperation ):
"" "Заголовок HTTP_HOST содержит недопустимое значение" ""
pass
class DisallowedRedirect ( SuspiciousOperation ):
"" "Перенаправить на схему не в разрешенном списке" ""
пройти
class TooManyFieldsSent ( SuspiciousOperation ):
"" "
Количество полей в запросе GET или POST превышено
настройками.DATA_UPLOAD_MAX_NUMBER_FIELDS.
" ""
pass
class RequestDataTooBig ( SuspiciousOperation ):
"" "
Размер запроса (без учета загрузки файлов) превысил
настройки.DATA_UPLOAD_MAX_MEMORY_SIZE.
" ""
пройти
[docs] class RequestAborted ( Exception ):
"" "Запрос был закрыт до того, как он был завершен, или истекло время ожидания." ""
pass
[docs] class BadRequest ( Exception ):
"" "Запрос неверен и не может быть обработан." ""
pass
[docs] class PermissionDenied ( Exception ):
"" "У пользователя не было разрешения на выполнение этого" ""
прохода
[docs] class ViewDoesNotExist ( Exception ):
"" "Запрошенное представление не существует" ""
пройти
[docs] class MiddlewareNotUsed ( Exception ):
"" "Это промежуточное ПО не используется в этой конфигурации сервера" ""
проход
[docs] class FieldError ( Exception ):
"" "Какая-то проблема с полем модели." ""
pass
NON_FIELD_ERRORS = '__all__'
[docs] class ValidationError ( Exception ):
"" "Ошибка при проверке данных." ""
def __init__ ( self , message , code = None , params = None ):
"" "
Аргумент` message` может быть единственной ошибкой , список ошибок или
словарь, который сопоставляет имена полей со списками ошибок. То, что мы определяем как
«ошибку», может быть либо простой строкой, либо экземпляром
ValidationError с установленным атрибутом сообщения, и тем, что мы определяем как
Список или словарь может быть фактическим `list` или` dict` или экземпляром
ValidationError с установленным атрибутом `error_list` или` error_dict`.
"" "
super () . __init__ ( сообщение , код , параметры )
if isinstance ( message , ValidationError ):
if hasattr ( message , 'error_dict' ):
message = message . error_dict
elif not hasattr ( message , 'сообщение' ):
message = message . error_list
else :
сообщение , код , params = message . сообщение , сообщение . код , сообщение. параметры
if isinstance ( message , dict ):
self . error_dict = {}
для поля , сообщения в сообщении . items ():
если не isinstance ( messages , ValidationError ):
messages = ValidationError ( messages )
self . error_dict [ поле ] = сообщения . error_list
elif isinstance ( сообщение , список ):
self . error_list = []
для сообщения в сообщении :
# Нормализовать простые строки в экземпляры ValidationError.
если не isinstance ( message , ValidationError ):
message = ValidationError ( message )
if hasattr ( message , 'error_dict' ):
self . error_list . продлить ( сумма( message . error_dict . values (), []))
else :
self . error_list . расширить ( сообщение . список_ошибок )
еще :
я . message = собственное сообщение
. код = код самостоятельно . params = params self . error_list = [ сам ]
@property
def message_dict ( self ):
# Запускать AttributeError, если эта ValidationError
# не имеет error_dict.
getattr ( сам , 'error_dict' )
return dict ( сам )
@property
def messages ( self ):
if hasattr ( self , 'error_dict' ):
return sum ( dict ( self ) . values (), [])
список возврата ( self )
def update_error_dict ( self , error_dict ):
if hasattr ( self , 'error_dict' ):
для поля , error_list в self . error_dict . items ():
error_dict . setdefault ( поле , []) . расширить ( список_ошибок )
еще :
error_dict . setdefault ( NON_FIELD_ERRORS , []) . продлить (я . error_list )
вернуть error_dict
def __iter__ ( self ):
if hasattr ( self , 'error_dict' ):
для поля , ошибки в self . error_dict . items ():
поле yield , list ( ValidationError ( errors )) else : для ошибки в self . список_ошибок : сообщение = ошибка . сообщение в случае ошибки . параметры :
сообщение % = ошибка . params
yield str ( сообщение )
def __str__ ( self ):
if hasattr ( self , 'error_dict' ):
return repr ( dict ( self ))
return repr ( list ( self ))
def __repr__ ( self ):
return 'ValidationError ( % s )' % self
def __eq__ ( self , other ):
if not isinstance ( other , ValidationError ):
return NotImplemented
return hash ( self ) == hash ( other )
def __hash__ ( self ):
if hasattr ( self , 'message' ):
return hash ((
self . message ,
self . code ,
make_hashable ( self . params ),
))
if hasattr ( self , 'error_dict' ):
return hash ( make_hashable ( self . error_dict ))
return hash ( tuple (отсортировано ( self . error_list , key = operator . attrgetter ( 'message' ))))
[docs] class EmptyResultSet ( Exception ):
"" "Предикат запроса к базе данных невозможен." ""
pass
[docs] class SynchronousOnlyOperation ( Exception ):
"" "Пользователь попытался вызвать функцию только для синхронизации из асинхронного контекста." ""
pass