Система проверки системы¶
Фреймворк системной проверки представляет собой набор статических проверок для проверки проектов Django. Он обнаруживает распространенные проблемы и дает подсказки по их устранению. Платформа расширяема, поэтому вы можете легко добавлять свои собственные проверки.
Подробную информацию о том, как добавлять свои собственные проверки и интегрировать их с системными проверками Django, см. в Руководстве по проверке системы.
Справочник по API¶
Проверить сообщение¶
- class CheckMessage(level, msg, hint=None, obj=None, id=None)¶
Предупреждения и ошибки, возникающие при проверке системы, должны быть экземплярами CheckMessage. Экземпляр инкапсулирует одну отчетную ошибку или предупреждение. Он также предоставляет контекст и подсказки, применимые к сообщению, а также уникальный идентификатор, который используется в целях фильтрации.
Аргументы конструктора:
уровеньСерьезность сообщения. Используйте одно из предопределенных значений:
DEBUG,INFO,WARNING,ERROR,CRITICAL. Если уровень больше или равен «ERROR», то Django предотвратит выполнение команд управления. Сообщения с уровнем нижеERROR(т.е. предупреждения) передаются на консоль, но их можно отключить.сообщениеКороткая (менее 80 символов) строка, описывающая проблему. Строка не должна содержать символы новой строки.
подсказкаОднострочная строка, содержащая подсказку по устранению проблемы. Если подсказка не может быть предоставлена или подсказка очевидна из сообщения об ошибке, подсказку можно опустить или использовать значение None.
объектНеобязательный. Объект, предоставляющий контекст для сообщения (например, модель, в которой была обнаружена проблема). Объект должен быть моделью, полем, менеджером или любым другим объектом, который определяет метод __str__(). Этот метод используется при сообщении обо всех сообщениях, и его результат предшествует сообщению.
идентификаторНеобязательная строка. Уникальный идентификатор проблемы. Идентификаторы должны соответствовать шаблону applabel.X001, где X — это одна из букв CEWID, обозначающая серьезность сообщения («C» для критических сообщений, «E» для ошибок и т. д.). Номер может быть назначен приложением, но он должен быть уникальным внутри этого приложения.
Существуют подклассы, упрощающие создание сообщений с общими уровнями. При их использовании вы можете опустить аргумент «уровень», поскольку он подразумевается в имени класса.
- class Debug(msg, hint=None, obj=None, id=None)¶
- class Info(msg, hint=None, obj=None, id=None)¶
- class Warning(msg, hint=None obj=None, id=None)¶
- class Error(msg, hint=None, obj=None, id=None)¶
- class Critical(msg, hint=None, obj=None, id=None)¶
Основные проверки системы¶
Асинхронная поддержка¶
Следующие проверки проверяют настройку Асинхронная поддержка:
async.E001: Не следует устанавливать переменную среды
DJANGO_ALLOW_ASYNC_UNSAFEпри развертывании. Это отключает асинхронную защиту.
Обратная совместимость¶
Проверки совместимости предупреждают о потенциальных проблемах, которые могут возникнуть после обновления Django.
2_0.W001: Ваш шаблон URL
<pattern>имеетroute, который содержит(?P<, начинается с^или заканчивается на$. Вероятно, это была ошибка при переходе сurl()наpath().4_0.E001: Начиная с Django 4.0, значения в настройке
CSRF_TRUSTED_ORIGINSдолжны начинаться со схемы (обычноhttp://илиhttps://), но обнаруживаться<hostname>.
Тайники¶
Следующие проверки проверяют правильность настройки параметра CACHES:
caches.E001: Вы должны определить кэш по умолчанию в настройках
CACHES.caches.W002: Ваша конфигурация
<cache>может открыть доступ к вашему кэшу или привести к повреждению ваших данных, поскольку ееLOCATIONсоответствует/находится внутри/содержитMEDIA_ROOT/STATIC_ROOT/STATICFILES_DIRS.caches.W003: Ваш кэш
<cache>:setting:LOCATION <CACHES-LOCATION> является относительным. Вместо этого используйте абсолютный путь.
База данных¶
MySQL и МарияДБ¶
Если вы используете MySQL или MariaDB, будут выполнены следующие проверки:
mysql.E001: MySQL/MariaDB не позволяет уникальным полям
CharFieldиметьmax_length> 255. Эта проверка была изменена наmysql.W003в Django 3.1, поскольку реальный максимальный размер зависит от многих факторов.mysql.W002: Строгий режим MySQL/MariaDB не установлен для подключения к базе данных
<alias>. См. также Настройка sql_mode.mysql.W003: MySQL/MariaDB может не допускать, чтобы уникальные поля CharField имели длину max_length > 255.
Управление файлами¶
Следующие проверки проверяют настройку Управление файлами:
files.E001: Параметр
FILE_UPLOAD_TEMP_DIRотносится к несуществующему каталогу<path>.
Поля модели¶
fields.E001: имена полей не должны заканчиваться подчеркиванием.
fields.E002: имена полей не должны содержать
"__".fields.E003:
pk— это зарезервированное слово, которое нельзя использовать в качестве имени поля.fields.E004:
choicesдолжно быть сопоставлением (например, словарем) или итерируемым объектом (например, списком или кортежем).fields.E005:
choicesдолжно быть сопоставлением фактических значений с удобочитаемыми именами или итерацией, содержащей кортежи(фактическое значение, удобочитаемое имя).fields.E006:
db_indexдолжен бытьNone,TrueилиFalse.fields.E007: Первичные ключи не должны иметь
null=True.fields.E008: Все валидаторы должны быть вызываемыми.
fields.E009:
max_lengthслишком мал, чтобы вместить самое длинное значение вchoices(символов<count>).fields.E010:
<field>по умолчанию должен быть вызываемым объектом, а не экземпляром, чтобы он не использовался совместно всеми экземплярами поля.fields.E011:
<database>не поддерживает значения базы данных по умолчанию с выражениями (db_default).fields.E012:
<выражение>нельзя использовать вdb_default.fields.E100: ``AutoField``s должен установить Primary_key=True.
fields.E110:
BooleanFields не принимает нулевые значения. Эта проверка появилась до того, как в Django 2.1 была добавлена поддержка нулевых значений.fields.E120:
CharFields должен определить атрибутmax_length.fields.E121:
max_lengthдолжно быть положительным целым числом.fields.W122:
max_lengthигнорируется при использовании с<тип целочисленного поля>.fields.E130:
DecimalFields должен определять атрибутdecimal_places.fields.E131:
decimal_placesдолжно быть неотрицательным целым числом.fields.E132:
DecimalFields должен определять атрибутmax_digits.fields.E133:
max_digitsдолжно быть положительным целым числом.fields.E134:
max_digitsдолжно быть больше или равноdecimal_places.fields.E140: для
FilePathFields либоallow_files, либоallow_foldersдолжно быть установлено значение True.fields.E150:
GenericIPAddressFieldне может иметьblank=True, еслиnull=False, поскольку пустые значения сохраняются как нулевые значения.fields.E160: параметры auto_now, auto_now_add и default являются взаимоисключающими. Может присутствовать только один из этих вариантов.
fields.W161: предоставляется фиксированное значение по умолчанию.
fields.W162:
<база данных>не поддерживает индекс базы данных для столбцов<тип данных поля>.fields.W163:
<database>не поддерживает комментарии к столбцам (db_comment).fields.E170: Значение по умолчанию для
BinaryFieldне может быть строкой. Вместо этого используйте байтовое содержимое.fields.E180:
<database>не поддерживаетJSONFields.fields.E190:
<database>не поддерживает параметры сортировки базы данных для<field_type>s.fields.E220:
<database>не поддерживаетGeneratedFields.fields.E221:
<database>не поддерживает несохраняемыеGeneratedFields.fields.E222:
<database>не поддерживает постоянныеGeneratedFields.fields.E223:
GeneratedField.output_fieldсодержит ошибки: …fields.W224:
GeneratedField.output_fieldимеет предупреждения: …fields.E900: IPAddressField удален, за исключением поддержки исторических миграций.
fields.W900:
IPAddressFieldустарел. Его поддержка (за исключением исторических миграций) будет удалена в Django 1.9. Эта проверка появилась в Django 1.7 и 1.8.fields.W901:
CommaSeparatedIntegerFieldустарел. Его поддержка (за исключением исторических миграций) будет удалена в Django 2.0. Эта проверка появилась в Django 1.10 и 1.11.fields.E901:
CommaSeparatedIntegerFieldудален, за исключением поддержки исторических миграций.fields.W902:
FloatRangeFieldустарел и будет удален в Django 3.1. Эта проверка появилась в Django 2.2 и 3.0.fields.W903:
NullBooleanFieldустарел. Его поддержка (за исключением исторических миграций) будет удалена в Django 4.0. Эта проверка появилась в Django 3.1 и 3.2.fields.E903: NullBooleanField удален, за исключением поддержки исторических миграций.
fields.W904:
django.contrib.postgres.fields.JSONFieldустарел. Его поддержка (за исключением исторических миграций) будет удалена в Django 4.0. Эта проверка появилась в Django 3.1 и 3.2.fields.E904:
django.contrib.postgres.fields.JSONFieldудален, за исключением поддержки исторических миграций.fields.W905:
django.contrib.postgres.fields.CICharFieldустарел. Его поддержка (за исключением исторических миграций) будет удалена в Django 5.1. Эта проверка появилась в Django 4.2 и 5.0.fields.E905:
django.contrib.postgres.fields.CICharFieldудален, за исключением поддержки исторических миграций.fields.W906:
django.contrib.postgres.fields.CIEmailFieldустарел. Его поддержка (за исключением исторических миграций) будет удалена в Django 5.1. Эта проверка появилась в Django 4.2 и 5.0.fields.E906:
django.contrib.postgres.fields.CIEmailFieldудален, за исключением поддержки исторических миграций.fields.W907:
django.contrib.postgres.fields.CITextFieldустарел. Его поддержка (за исключением исторических миграций) будет удалена в Django 5.1. Эта проверка появилась в Django 4.2 и 5.0.fields.E907:
django.contrib.postgres.fields.CITextFieldудален, за исключением поддержки исторических миграций.
Поля файла¶
fields.E200:
uniqueне является допустимым аргументом дляFileField. Эта проверка удалена в Django 1.11.fields.E201:
primary_keyне является допустимым аргументом дляFileField.fields.E202: аргумент
FileFieldupload_toдолжен быть относительным, а не абсолютным путем.fields.E210: невозможно использовать ImageField, поскольку Pillow не установлен.
Модели¶
models.E001:
<swappable>не имеет формыapp_label.app_name.models.E002:
<SETTING>ссылается на<model>, которая не установлена или является абстрактной.models.E003: модель имеет два идентичных отношения «многие ко многим» через промежуточную модель
<app_label>.<model>.models.E004:
idможно использовать в качестве имени поля только в том случае, если в поле также установленоprimary_key=True.models.E005: Поле
<имя поля>из родительской модели<модель>конфликтует с полем<имя поля>из родительской модели<модель>.models.E006: поле
<имя поля>конфликтует с полем<имя поля>из модели<модель>.models.E007: Поле
<имя поля>имеет имя столбца<имя столбца>, которое используется другим полем.models.E008:
index_togetherдолжен быть списком или кортежем. Эта проверка появилась до Django 5.1.models.E009: Все элементы index_together должны быть списками или кортежами. Эта проверка появилась до Django 5.1.
models.E010:
unique_togetherдолжен быть списком или кортежем.models.E011: Все элементы unique_together должны быть списками или кортежами.
models.E012:
constraints/indexes/unique_togetherотносится к несуществующему полю<имя поля>.models.E013:
constraints/indexes/unique_togetherотносится кManyToManyField<имя поля>, ноManyToManyFields не поддерживаются для этого параметра.models.E014:
orderingдолжен быть кортежем или списком (даже если вы хотите упорядочить только по одному полю).models.E015:
упорядочениеотносится к несуществующему полю, связанному полю или поиску<имя поля>.models.E016:
constraints/indexes/unique_togetherотносится к полю<field_name>, которое не является локальным для модели<model>.models.E017: Прокси-модель
<model>содержит поля модели.models.E018: автоматически созданное имя столбца слишком длинное для поля
<field>. Максимальная длина —<maximum length>для базы данных<alias>.models.E019: автоматически созданное имя столбца слишком длинное для поля M2M
<M2M field>. Максимальная длина —<maximum length>для базы данных<alias>.models.E020: метод класса
<model>.check()в настоящее время переопределен.models.E021:
orderingиorder_with_respect_toнельзя использовать вместе.models.E022:
<function>содержит ленивую ссылку на<app label>.<model>, но приложение<app label>не установлено или не предоставляет модель<model>.models.E023: имя модели
<model>не может начинаться или заканчиваться подчеркиванием, поскольку оно противоречит синтаксису поиска запроса.models.E024: имя модели
<model>не может содержать двойное подчеркивание, поскольку оно противоречит синтаксису поиска запроса.models.E025: свойство
<имя свойства>конфликтует со связанным средством доступа к полю.models.E026: Модель не может иметь более одного поля с
primary_key=True.models.W027:
<database>не поддерживает проверочные ограничения.models.E028:
db_table<db_table>используется несколькими моделями:<model list>.models.E029: имя индекса
<index>не является уникальным для модели<model>.models.E030: имя индекса
<index>не уникально среди моделей:<список моделей>.models.E031: имя ограничения
<constraint>не является уникальным для модели<model>.models.E032: имя ограничения
<constraint>не является уникальным среди моделей:<список моделей>.models.E033: имя индекса
<index>не может начинаться с подчеркивания или цифры.models.E034: Имя индекса
<index>не может содержать больше символов<max_length>.models.W035:
db_table<db_table>используется несколькими моделями:<model list>.models.W036:
<database>не поддерживает уникальные ограничения с условиями.models.W037:
<database>не поддерживает индексы с условиями.models.W038:
<database>не поддерживает отложенные ограничения уникальности.models.W039:
<database>не поддерживает ограничения уникальности для неключевых столбцов.models.W040:
<database>не поддерживает индексы с неключевыми столбцами.models.E041:
constraintsотносится к объединенному полю<имя поля>.models.W042: автоматически создаваемый первичный ключ, используемый, когда не определен тип первичного ключа, по умолчанию
django.db.models.AutoField.models.W043:
<database>не поддерживает индексы для выражений.models.W044:
<database>не поддерживает ограничения уникальности для выражений.models.W045: Проверочное ограничение
<constraint>содержит выражениеRawSQL()и не будет проверяться во время моделиfull_clean().models.W046:
<database>не поддерживает комментарии к таблицам (db_table_comment).models.W047:
<database>не поддерживает ограничения уникальности с отдельными нулями.
Безопасность¶
Проверки безопасности не обеспечивают безопасность вашего сайта. Они не проверяют код, не обнаруживают вторжений и не делают ничего особенно сложного. Скорее, они помогают выполнить автоматизированный, легко висящий контрольный список, который может помочь вам улучшить безопасность вашего сайта.
Некоторые из этих проверок могут не подходить для вашей конкретной конфигурации развертывания. Например, если вы выполняете перенаправление HTTP на HTTPS в балансировщике нагрузки, будет раздражать постоянное предупреждение о том, что вы не включили SECURE_SSL_REDIRECT. Используйте SILENCED_SYSTEM_CHECKS, чтобы отключить ненужные проверки.
Следующие проверки выполняются, если вы используете опцию check --deploy:
security.W001: У вас нет
django.middleware.security.SecurityMiddlewareв вашемMIDDLEWARE, поэтомуSECURE_HSTS_SECONDS,SECURE_CONTENT_TYPE_NOSNIFF,SECURE_REFERRER_POLICY, НастройкиSECURE_CROSS_ORIGIN_OPENER_POLICYиSECURE_SSL_REDIRECTне будут иметь никакого эффекта.security.W002: У вас нет
django.middleware.clickjacking.XFrameOptionsMiddlewareв вашемMIDDLEWARE, поэтому ваши страницы не будут обслуживаться с заголовком'x-frame-options'. Если нет веской причины для показа вашего сайта во фрейме, вам следует рассмотреть возможность включения этого заголовка, чтобы предотвратить атаки кликджекинга.security.W003: Похоже, вы не используете встроенную в Django защиту от подделки межсайтовых запросов через промежуточное программное обеспечение (
django.middleware.csrf.CsrfViewMiddlewareотсутствует в вашемMIDDLEWARE). Включение промежуточного программного обеспечения — самый безопасный подход, позволяющий не оставить никаких дыр.security.W004: Вы не установили значение для параметра
SECURE_HSTS_SECONDS. Если весь ваш сайт обслуживается только через SSL, вы можете рассмотреть возможность установки значения и включения HTTP Strict Transport Security. Обязательно сначала прочтите документацию; Небрежное включение HSTS может вызвать серьезные, необратимые проблемы.security.W005: Вы не установили для параметра
SECURE_HSTS_INCLUDE_SUBDOMAINSзначениеTrue. Без этого ваш сайт потенциально уязвим для атаки через небезопасное соединение с субдоменом. Установите для этого параметра значение «True», только если вы уверены, что все поддомены вашего домена должны обслуживаться исключительно через SSL.security.W006: Для параметра
SECURE_CONTENT_TYPE_NOSNIFFне установлено значениеTrue, поэтому ваши страницы не будут обслуживаться с заголовком'X-Content-Type-Options: nosniff'. Вам следует рассмотреть возможность включения этого заголовка, чтобы браузер не мог неправильно идентифицировать типы контента.security.W007: для вашего параметра
SECURE_BROWSER_XSS_FILTERне установлено значениеTrue, поэтому ваши страницы не будут обслуживаться с'X-XSS-Protection: 1; mode=block'заголовок. Вам следует рассмотреть возможность включения этого заголовка, чтобы активировать XSS-фильтрацию браузера и помочь предотвратить XSS-атаки. Эта проверка удалена в Django 3.0, поскольку *заголовок ``X-XSS-Protection`` *больше не учитывается современными браузерами.security.W008: Для параметра
SECURE_SSL_REDIRECTне установлено значениеTrue. Если ваш сайт не должен быть доступен как по SSL, так и по не-SSL-соединениям, вы можете либо установить для этого параметра значение «True», либо настроить балансировщик нагрузки или обратный прокси-сервер для перенаправления всех соединений на HTTPS.security.W009: Ваш
SECRET_KEYимеет менее 50 символов, менее 5 уникальных символов или имеет префикс'django-insecure-', указывающий, что он был сгенерирован Django автоматически. Пожалуйста, сгенерируйте длинное и случайное значение, иначе многие критически важные для безопасности функции Django будут уязвимы для атак.security.W010: У вас есть
django.contrib.sessionsв вашихINSTALLED_APPS, но вы не установилиSESSION_COOKIE_SECUREнаTrue. Использование файлов cookie, предназначенных только для безопасного сеанса, затрудняет перехват пользовательских сеансов анализаторами сетевого трафика.security.W011: У вас есть
django.contrib.sessions.middleware.SessionMiddlewareв вашемMIDDLEWARE, но вы не установилиSESSION_COOKIE_SECUREнаTrue. Использование файлов cookie, предназначенных только для безопасного сеанса, затрудняет перехват пользовательских сеансов анализаторами сетевого трафика.security.W012:
SESSION_COOKIE_SECUREне имеет значенияTrue. Использование файлов cookie, предназначенных только для безопасного сеанса, затрудняет перехват пользовательских сеансов анализаторами сетевого трафика.security.W013: У вас есть
django.contrib.sessionsв вашихINSTALLED_APPS, но вы не установилиSESSION_COOKIE_HTTPONLYнаTrue. Использование файла cookie сеанса HttpOnly затрудняет перехват пользовательских сеансов атаками с использованием межсайтовых сценариев.security.W014: У вас есть
django.contrib.sessions.middleware.SessionMiddlewareв вашемMIDDLEWARE, но вы не установилиSESSION_COOKIE_HTTPONLYнаTrue. Использование файла cookie сеанса HttpOnly затрудняет перехват пользовательских сеансов атаками с использованием межсайтовых сценариев.security.W015:
SESSION_COOKIE_HTTPONLYне имеет значенияTrue. Использование файла cookie сеанса HttpOnly затрудняет перехват пользовательских сеансов атаками с использованием межсайтовых сценариев.security.W016:
CSRF_COOKIE_SECUREне имеет значенияTrue. Использование файла cookie CSRF, предназначенного только для безопасного использования, затрудняет кражу токена CSRF для анализаторов сетевого трафика.security.W017:
CSRF_COOKIE_HTTPONLYне имеет значенияTrue. Использование файла cookie CSRF HttpOnly затрудняет кражу токена CSRF для атак с использованием межсайтовых сценариев. Эта проверка удалена в Django 1.11, посколькуCSRF_COOKIE_HTTPONLYнастройка не приносит никакой практической пользы.security.W018: при развертывании для
DEBUGне должно быть установлено значениеTrue.security.W019: У вас есть
django.middleware.clickjacking.XFrameOptionsMiddlewareв вашемMIDDLEWARE, ноX_FRAME_OPTIONSне установлен в'DENY'. Если у вашего сайта нет веской причины отображать другие части самого себя во фрейме, вам следует изменить его на'DENY'.security.W020:
ALLOWED_HOSTSне должен быть пустым при развертывании.security.W021: Вы не установили для параметра
SECURE_HSTS_PRELOADзначениеTrue. Без этого ваш сайт не сможет быть добавлен в список предварительной загрузки браузера.security.W022: Вы не установили параметр
SECURE_REFERRER_POLICY. Без этого ваш сайт не будет отправлять заголовок Referrer-Policy. Вам следует рассмотреть возможность включения этого заголовка для защиты конфиденциальности пользователя.security.E023: Вы установили для параметра
SECURE_REFERRER_POLICYнедопустимое значение.security.E024: Вы установили для параметра
SECURE_CROSS_ORIGIN_OPENER_POLICYнедопустимое значение.security.W025: Ваша настройка:SECRET_KEY_FALLBACKS[n] <SECRET_KEY_FALLBACKS> имеет менее 50 символов, менее 5 уникальных символов или имеет префикс
'django-insecure-', указывающий, что он был сгенерирован автоматически Django. Пожалуйста, сгенерируйте длинное и случайное значение, иначе многие критически важные для безопасности функции Django будут уязвимы для атак.
Следующие проверки проверяют правильность настройки параметров безопасности:
security.E100:
DEFAULT_HASHING_ALGORITHMдолжен быть'sha1'или'sha256'. Эта проверка появилась в Django 3.1 и 3.2.security.E101: представление ошибки CSRF
'path.to.view'не принимает правильное количество аргументов.security.E102: Не удалось импортировать представление ошибки CSRF
'path.to.view'.
Сигналы¶
signals.E001:
<handler>был подключен к сигналу<signal>с ленивой ссылкой на отправителя<app label>.<model>, но приложение<app label>не установлено или не предоставляет модель<model>.
Шаблоны¶
Следующие проверки проверяют правильность настройки параметра TEMPLATES:
templates.E001: У вас есть
'APP_DIRS': True'' в вашем :setting:`TEMPLATES`, но вы также указываете ``'loaders'вOPTIONS. Либо удалитеAPP_DIRS, либо удалите опцию'loaders'. Эта проверка удалена в Django 5.1, так как системные проверки теперь могут вызыватьImproperlyConfiguredвместо этого.templates.E002:
string_if_invalidвTEMPLATESOPTIONSдолжен быть строкой, но имеет:{value}({type}).templates.E003:
<имя>используется для нескольких модулей тегов шаблона:<список модулей>. Эта проверка была изменена наtemplates.W003в Django 4.1.2.templates.W003:
<имя>используется для нескольких модулей тегов шаблона:<список модулей>.
Перевод¶
В вашей конфигурации перевода выполняются следующие проверки:
translation.E001: Вы указали недопустимое значение для параметра
LANGUAGE_CODE:<value>.translation.E002: Вы указали неверный код языка в настройке
LANGUAGES:<value>.translation.E003: Вы указали неверный код языка в настройке
LANGUAGES_BIDI:<value>.translation.E004: Вы указали значение для параметра
LANGUAGE_CODE, которого нет в параметреLANGUAGES.
URL-ы¶
В конфигурации URL-адреса выполняются следующие проверки:
urls.W001: Ваш шаблон URL
<pattern>используетinclude()сroute, заканчивающимся на$. Удалите доллар из маршрута, чтобы избежать проблем, включая URL-адреса.urls.W002: Ваш шаблон URL
<шаблон>имеетмаршрут, начинающийся с/. Удалите эту косую черту, так как она не нужна. Если этот шаблон предназначен дляinclude(), убедитесь, что шаблонinclude()имеет завершающий/.urls.W003: Ваш шаблон URL
<шаблон>имеетимя, включая:. Удалите двоеточие, чтобы избежать неоднозначных ссылок на пространство имен.urls.E004: Ваш шаблон URL
<шаблон>недействителен. Убедитесь, что urlpatterns представляет собой список экземпляровpath()и/илиre_path().urls.W005: пространство имен URL
<namespace>не уникально. Возможно, вы не сможете реверсировать все URL-адреса в этом пространстве имен.urls.E006: Параметр
MEDIA_URL/STATIC_URLдолжен заканчиваться косой чертой.urls.E007: Пользовательское представление
handlerXXX'path.to.view'не принимает правильное количество аргументов (…).urls.E008: Пользовательское представление «handlerXXX» «path.to.view» не удалось импортировать.
urls.E009: Ваш шаблон URL
<pattern>имеет недопустимое представление, передайте<view>.as_view()вместо<view>.urls.W010: Ваш шаблон URL
<шаблон>содержит несовпадающую<угловую скобку>.
contrib проверяет приложение¶
админ¶
Все проверки администратора выполняются как часть тега admin.
Следующие проверки выполняются для любого ModelAdmin (или подкласса), зарегистрированного на сайте администратора:
admin.E001: значение
raw_id_fieldsдолжно быть списком или кортежем.admin.E002: Значение
raw_id_fields[n]относится к<имя поля>, которое не является полем<модель>.admin.E003: значение
raw_id_fields[n]должно быть внешним ключом или полем «многие-ко-многим».admin.E004: значение поля должно быть списком или кортежем.
admin.E005: указаны как
fieldsets, так иfields.admin.E006: Значение поля содержит повторяющиеся поля.
admin.E007: значением
fieldsetsдолжен быть список или кортеж.admin.E008: значение
fieldsets[n]должно быть списком или кортежем.admin.E009: значение
fieldsets[n]должно иметь длину 2.admin.E010: Значение
fieldsets[n][1]должно быть словарем.admin.E011: Значение
fieldsets[n][1]должно содержать ключfields.admin.E012: В
fieldsets[n][1]имеются повторяющиеся поля.admin.E013: Значение
fields[n]/filter_horizontal[n]/filter_vertical[n]/fieldsets[n][m]не может включатьManyToManyField<имя поля>, поскольку это поле вручную определяет модель отношений.admin.E014: Значение
excludeдолжно быть списком или кортежем.admin.E015: Значение
excludeсодержит повторяющиеся поля.admin.E016: значение form должно наследовать от BaseModelForm.
admin.E017: Значение filter_vertical должно быть списком или кортежем.
admin.E018: значение filter_horizontal должно быть списком или кортежем.
admin.E019: Значение
filter_vertical[n]/filter_horizontal[n]относится к<имя поля>, которое не является полем<model>.admin.E020: Значение
filter_vertical[n]/filter_horizontal[n]должно быть полем «многие ко многим».admin.E021: значение
radio_fieldsдолжно быть словарем.admin.E022: Значение
radio_fieldsотносится к<имя поля>, которое не является полем<модель>.admin.E023: Значение
radio_fieldsотносится к<имя поля>, которое не является экземпляромForeignKeyи не имеет определенияchoices.admin.E024: Значение
radio_fields[<имя поля>]должно быть либоadmin.HORIZONTAL, либоadmin.VERTICAL.admin.E025: значение
view_on_siteдолжно быть либо вызываемым, либо логическим значением.admin.E026: значение prepopulated_fields должно быть словарем.
admin.E027: Значение
prepopulated_fieldsотносится к<имя поля>, которое не является полем<модель>.admin.E028: Значение
prepopulated_fieldsотносится к<имя поля>, которое не должно быть полемDateTimeField,ForeignKey,OneToOneFieldилиManyToManyField.admin.E029: значение
prepopulated_fields[<имя поля>]должно быть списком или кортежем.admin.E030: Значение
prepopulated_fieldsотносится к<имя поля>, которое не является полем<модель>.admin.E031: значение
orderingдолжно быть списком или кортежем.admin.E032: значение
orderingимеет случайный маркер упорядочения?, но содержит также и другие поля.admin.E033: Значение
orderingотносится к<имя поля>, которое не является полем<model>.admin.E034: значение
readonly_fieldsдолжно быть списком или кортежем.admin.E035: Значение
readonly_fields[n]относится к<field_name>, который не является вызываемым объектом, атрибутом<ModelAdmin class>или атрибутом<model>.admin.E036: значение autocomplete_fields должно быть списком или кортежем.
admin.E037: Значение
autocomplete_fields[n]относится к<имя поля>, которое не является полем<модель>.admin.E038: значение
autocomplete_fields[n]должно быть внешним ключом или полем «многие-ко-многим».admin.E039: администратор модели
<model>должен быть зарегистрирован, чтобы на него ссылался<modeladmin>.autocomplete_fields.admin.E040:
<modeladmin>должен определитьsearch_fields, поскольку на него ссылается<other_modeladmin>.autocomplete_fields.
Администратор модели¶
Следующие проверки выполняются для любого ModelAdmin, зарегистрированного на сайте администратора:
admin.E101: Значение save_as должно быть логическим.
admin.E102: значение save_on_top должно быть логическим.
admin.E103: значение
inlinesдолжно быть списком или кортежем.admin.E104:
<InlineModelAdmin class>должен наследовать отInlineModelAdmin.admin.E105:
<InlineModelAdmin class>должен иметь атрибутmodel.admin.E106: значение
<InlineModelAdmin class>.modelдолжно бытьModel.admin.E107: Значение list_display должно быть списком или кортежем.
admin.E108: Значение
list_display[n]относится к<label>, который не является вызываемым объектом или атрибутом<ModelAdmin class>, а также атрибутом, методом или полем<model>.admin.E109: значение list_display[n]`` не должно быть полем «многие ко многим» или обратным внешним ключом.
admin.E110: значение list_display_links должно быть списком, кортежем или значением None.
admin.E111: Значение list_display_links[n]`` относится к
<label>, который не определен вlist_display.admin.E112: Значение list_filter должно быть списком или кортежем.
admin.E113: Значение list_filter[n]` должно наследовать от ListFilter.
admin.E114: значение list_filter[n]`` не должно наследовать от
FieldListFilter.admin.E115: значение list_filter[n][1]`` должно наследовать от
FieldListFilter.admin.E116: Значение list_filter[n]`` относится к
<label>, который не относится к полю.admin.E117: значение list_select_related должно быть логическим, кортежем или списком.
admin.E118: Значение list_per_page должно быть целым числом.
admin.E119: Значение list_max_show_all должно быть целым числом.
admin.E120: значение list_editable должно быть списком или кортежем.
admin.E121: Значение list_editable[n]`` относится к
<label>, который не является полем<model>.admin.E122: Значение list_editable[n]`` относится к
<label>, который не содержится вlist_display.admin.E123: Значение list_editable[n]`` не может находиться одновременно в
list_editableиlist_display_links.admin.E124: Значение list_editable[n]`` относится к первому полю в
list_display(<label>), которое нельзя использовать, если не установленоlist_display_links.admin.E125: Значение list_editable[n]`` относится к
<имя поля>, которое нельзя редактировать через администратора.admin.E126: значение search_fields должно быть списком или кортежем.
admin.E127: Значение
date_hierarchyотносится к<имя поля>, которое не относится к полю.admin.E128: Значение date_hierarchy должно быть DateField или DateTimeField.
admin.E129:
<modeladmin>должен определить методhas_<foo>_permission()для действия<action>.admin.E130: атрибуты
__name__действий, определенные в<modeladmin>, должны быть уникальными. Имя<имя>не уникально.
InlineModelAdmin¶
Следующие проверки выполняются для любого InlineModelAdmin, который зарегистрирован как встроенный в ModelAdmin.
admin.E201: невозможно исключить поле
<имя поля>, поскольку оно является внешним ключом родительской модели<app_label>.<model>.admin.E202:
<model>не имеетForeignKeyдля<родительской модели>./<model>имеет более одногоForeignKeyдля<родительской модели>. Вы должны указать атрибут fk_name.admin.E203: Значение extra должно быть целым числом.
admin.E204: Значение max_num должно быть целым числом.
admin.E205: Значение min_num должно быть целым числом.
admin.E206: значение formset должно наследовать от BaseModelFormSet.
GenericInlineModelAdmin¶
Следующие проверки выполняются для любого GenericInlineModelAdmin, который зарегистрирован как встроенный в ModelAdmin.
admin.E301:
'ct_field'ссылается на<label>, который не является полем в<model>.admin.E302:
'ct_fk_field'ссылается на<label>, который не является полем в<model>.admin.E303:
<model>не имеетGenericForeignKey.admin.E304:
<model>не имеетGenericForeignKey, используя поле типа контента<имя поля>и поле идентификатора объекта<имя поля>.
Админсайт¶
Следующие проверки выполняются для стандартного AdminSite:
admin.E401:
django.contrib.contenttypesдолжен быть вINSTALLED_APPS, чтобы использовать приложение администратора.admin.E402:
django.contrib.auth.context_processors.authдолжен быть включен вDjangoTemplates(TEMPLATES), если для использования приложения администратора используется серверная часть аутентификации по умолчанию.admin.E403: Экземпляр
django.template.backends.django.DjangoTemplatesдолжен быть настроен вTEMPLATES, чтобы использовать приложение администратора.admin.E404:
django.contrib.messages.context_processors.messagesдолжен быть включен вDjangoTemplates(TEMPLATES), чтобы использовать приложение администратора.admin.E405:
django.contrib.authдолжен быть вINSTALLED_APPS, чтобы использовать приложение администратора.admin.E406:
django.contrib.messagesдолжен быть вINSTALLED_APPS, чтобы использовать приложение администратора.admin.E408:
django.contrib.auth.middleware.AuthenticationMiddlewareдолжен быть вMIDDLEWARE, чтобы использовать приложение администратора.admin.E409:
django.contrib.messages.middleware.MessageMiddlewareдолжен быть вMIDDLEWARE, чтобы использовать приложение администратора.admin.E410:
django.contrib.sessions.middleware.SessionMiddlewareдолжен быть вMIDDLEWARE, чтобы использовать приложение администратора.admin.W411:
django.template.context_processors.requestдолжен быть включен вDjangoTemplates(TEMPLATES), чтобы использовать боковую панель навигации администратора.
аутентификация¶
auth.E001:
REQUIRED_FIELDSдолжен быть списком или кортежем.auth.E002: поле с именем USERNAME_FIELD для пользовательской модели пользователя не должно быть включено в REQUIRED_FIELDS.
auth.E003:
<field>должно быть уникальным, поскольку оно называетсяUSERNAME_FIELD.auth.W004:
<field>имеет имяUSERNAME_FIELD, но оно не уникально.auth.E005: разрешение под кодовым именем
<codename>конфликтует со встроенным разрешением для модели<model>.auth.E006: Разрешение с кодовым именем
<codename>дублируется для модели<model>.auth.E007:
verbose_nameмодели<model>должен содержать не более 244 символов, чтобы встроенные имена разрешений могли содержать не более 255 символов.auth.E008: разрешение с именем
<name>модели<model>имеет длину более 255 символов.auth.C009:
<User model>.is_anonymousдолжен быть атрибутом или свойством, а не методом. Игнорирование этого требования является проблемой безопасности, поскольку анонимные пользователи будут считаться аутентифицированными!auth.C010:
<User model>.is_authenticatedдолжен быть атрибутом или свойством, а не методом. Игнорирование этого требования является проблемой безопасности, поскольку анонимные пользователи будут считаться аутентифицированными!auth.E011: имя модели
<model>должно содержать не более 93 символов, чтобы встроенные имена разрешений могли содержать не более 100 символов.auth.E012: разрешение с кодовым именем
<codename>модели<model>имеет длину более 100 символов.auth.E013: Чтобы использовать
django.contrib.auth.middleware.LoginRequiredMiddleware,django.contrib.auth.middleware.AuthenticationMiddlewareдолжен быть определен до этого в MIDDLEWARE.
типы контента¶
Следующие проверки выполняются, когда модель содержит GenericForeignKey или GenericRelation:
contenttypes.E001: Идентификатор объекта GenericForeignKey ссылается на несуществующее поле
<field>.contenttypes.E002: Тип контента GenericForeignKey ссылается на несуществующее поле
<field>.contenttypes.E003:
<field>не являетсяForeignKey.contenttypes.E004:
<field>не являетсяForeignKeyдляcontenttypes.ContentType.contenttypes.E005: Названия моделей должны содержать не более 100 символов.
постгрес¶
Следующие проверки выполняются в полях модели django.contrib.postgres:
postgres.E001: Базовое поле массива содержит ошибки: …
postgres.E002: Базовое поле массива не может быть связанным полем.
postgres.E003:
<field>по умолчанию должен быть вызываемым, а не экземпляром, чтобы оно не было общим для всех экземпляров поля. Эта проверка была изменена наfields.E010в Django 3.1.postgres.W004: Базовое поле массива содержит предупреждения: …
сайты¶
Следующие проверки выполняются для любой модели с использованием CurrentSiteManager:
sites.E001:
CurrentSiteManagerне удалось найти поле с именем<имя поля>.sites.E002:
CurrentSiteManagerне может использовать<field>, поскольку оно не является внешним ключом или полем типа «многие-ко-многим».
Следующие проверки проверяют правильность настройки django.contrib.sites:
sites.E101: Параметр
SITE_IDдолжен быть целым числом.
статические файлы¶
Следующие проверки проверяют правильность настройки django.contrib.staticfiles:
staticfiles.E001: Параметр
STATICFILES_DIRSне является кортежем или списком.staticfiles.E002: Параметр
STATICFILES_DIRSне должен содержать параметрSTATIC_ROOT.staticfiles.E003: префикс
<prefix>в настройкеSTATICFILES_DIRSне должен заканчиваться косой чертой.staticfiles.W004: Каталог
<каталог>вSTATICFILES_DIRSне существует.staticfiles.E005: Параметр
STORAGESдолжен определять хранилищеstaticfiles.