Система проверок фреймворка
Система проверок фреймворка представляет собой набор статических проверок для валидации проектов Django. Она обнаруживает распространённые проблемы и предлагает подсказки по их исправлению. Фреймворк расширяем, поэтому вы можете легко добавить свои собственные проверки.
Подробности о том, как добавить свои собственные проверки и интегрировать их с системами проверок Django, см. в Руководстве по системе проверок.
Справочник API
CheckMessage
-
class CheckMessage(level, msg, hint=None, obj=None, id=None)[source]
Предупреждения и ошибки, поднятые системами проверок, должны быть экземплярами CheckMessage. Экземпляр инкапсулирует одну ошибку или предупреждение, подлежащие сообщению. Он также предоставляет контекст и подсказки, применимые к сообщению, и уникальный идентификатор, используемый для целей фильтрации.
Аргументы конструктора:
-
level -
Уровень серьёзности сообщения. Используйте одно из предопределённых значений:
DEBUG,INFO,WARNING,ERROR,CRITICAL. Если уровень не меньшеERROR, Django не позволит выполнение команд управления. Сообщения с уровнем нижеERROR(т.е. предупреждения) отображаются в консоли, но могут быть отключены. -
msg -
Короткий (менее 80 символов) строковый текст, описывающий проблему. Строка не должна содержать переводы строк.
-
hint -
Строковый текст в одну строку, предоставляющий подсказку по решению проблемы. Если подсказка невозможна или она очевидна из сообщения об ошибке, подсказку можно опустить или использовать значение
None. -
obj -
Необязательно. Объект, предоставляющий контекст для сообщения (например, модель, в которой была обнаружена проблема). Объект должен быть моделью, полем, менеджером или любым другим объектом, определяющим метод
__str__(). Метод используется при отчёте обо всех сообщениях, и его результат предшествует сообщению. -
id -
Необязательная строка. Уникальный идентификатор проблемы. Идентификаторы должны следовать шаблону
applabel.X001, гдеX— одна из буквCEWID, указывающая на уровень серьёзности сообщения (Cдля критических,Eдля ошибок). Число может быть назначено приложением, но должно быть уникальным в этом приложении.
Существуют подклассы, облегчающие создание сообщений с общими уровнями. При их использовании вы можете опустить аргумент level, так как он подразумевается именем класса.
-
class Debug(msg, hint=None, obj=None, id=None)[source]
-
class Info(msg, hint=None, obj=None, id=None)[source]
-
class Warning(msg, hint=None obj=None, id=None)[source]
-
class Error(msg, hint=None, obj=None, id=None)[source]
-
class Critical(msg, hint=None, obj=None, id=None)[source]
Основные проверки системы
Поддержка асинхронных операций
Следующие проверки проверяют вашу настройку для Поддержки асинхронных операций:
-
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: Необходимо определить кэш
'default'в вашей настройкеCACHES. -
caches.W002: Ваша конфигурация
<cache>может раскрыть ваш кэш или привести к повреждению данных, потому что еёLOCATIONсовпадает/располагается внутри/содержитMEDIA_ROOT/STATIC_ROOT/STATICFILES_DIRS. -
caches.W003: Ваш кэш
<cache>LOCATIONявляется относительным. Используйте абсолютный путь вместо него.
База данных
MySQL и MariaDB
Если вы используете 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должно быть отображением фактических значений на удобочитаемые имена или итерируемым объектом, содержащим(actual value, human readable name)кортежи. -
fields.E006:
db_indexдолжно бытьNone,TrueилиFalse. -
fields.E007: Первичные ключи не должны содержать
null=True. -
fields.E008: Все
validatorsдолжны быть вызываемыми. -
fields.E009:
max_lengthслишком маленький для размещения самого длинного значения вchoices(<count>символов). -
fields.E010: Значение по умолчанию
<field>должно быть вызываемым объектом, а не экземпляром, чтобы оно не делилось между всеми экземплярами полей. -
fields.E011:
<database>не поддерживает значения по умолчанию в базе данных с выражениями (db_default). -
fields.E012:
<expression>нельзя использовать вdb_default. -
fields.E013:
CompositePrimaryKeyдолжно быть именемpk. -
fields.E100:
AutoFieldдолжны устанавливать primary_key=True. -
fields.E110:
BooleanFieldне принимают значения null. Эта проверка появилась до добавления поддержки значений null в Django 2.1. -
fields.E120:
CharFieldдолжны определять атрибутmax_length. -
fields.E121:
max_lengthдолжно быть положительным целым числом. -
fields.W122:
max_lengthигнорируется при использовании с<integer field type>. -
fields.E130:
DecimalFieldдолжны определять атрибутdecimal_places. -
fields.E131:
decimal_placesдолжно быть неотрицательным целым числом. -
fields.E132:
DecimalFieldдолжны определять атрибутmax_digits. -
fields.E133:
max_digitsдолжно быть положительным целым числом. -
fields.E134:
max_digitsдолжно быть больше или равноdecimal_places. -
fields.E140:
FilePathFieldдолжны иметь либоallow_files, либоallow_folders, установленное в значение True. -
fields.E150:
GenericIPAddressFieldне могут иметьblank=True, еслиnull=False, так как пустые значения хранятся как null. -
fields.E160: Параметры
auto_now,auto_now_addиdefaultвзаимно исключают друг друга. Должен быть только один из этих параметров. - fields.W161: Установлено фиксированное значение по умолчанию.
-
fields.W162:
<database>не поддерживает индекс базы данных для столбцов<field data type>. -
fields.W163:
<database>не поддерживает комментарии к столбцам (db_comment). -
fields.E170:
BinaryField’sdefaultне может быть строкой. Используйте байтовую контент вместо этого. -
fields.E180:
<database>не поддерживаетJSONField. -
fields.E190:
<database>не поддерживает сортировку базы данных для<field_type>. -
fields.E220:
<database>не поддерживаетGeneratedField. -
fields.E221:
<database>не поддерживает непродолжающиесяGeneratedField. -
fields.E222:
<database>не поддерживает продолжающиесяGeneratedField. -
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: Аргумент
upload_toдляFileFieldдолжен быть относительным путем, а не абсолютным. -
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: Поле
<field name>из родительской модели<model>конфликтует с полем<field name>из родительской модели<model>. -
models.E006: Поле
<field name>конфликтует с полем<field name>из модели<model>. -
models.E007: Поле
<field name>имеет имя столбца<column name>, которое используется другим полем. -
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ссылается на несуществующее поле<field name>. -
models.E013:
constraints/indexes/unique_togetherссылается наManyToManyField<field name>, ноManyToManyFieldне поддерживаются для этого варианта. -
models.E014:
orderingдолжно быть кортежем или списком (даже если вы хотите отсортировать только по одному полю). -
models.E015:
orderingссылается на несуществующее поле, связанное поле или поиск<field name>. -
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: Свойство
<property name>конфликтует с доступом к связанному полю. -
models.E026: Модель не может иметь более одного поля с
primary_key=True. -
models.W027:
<database>не поддерживает ограничения проверки. -
models.E028:
db_table<db_table>используется несколькими моделями:<model list>. -
models.E029: Имя индекса
<index>не уникально для модели<model>. -
models.E030: Имя индекса
<index>не уникально среди моделей:<model list>. -
models.E031: Имя ограничения
<constraint>не уникально для модели<model>. -
models.E032: Имя ограничения
<constraint>не уникально среди моделей:<model list>. -
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ссылается на объединённое поле<field name>. -
models.E042:
<field name>не может быть включён в составной первичный ключ. -
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>не поддерживает уникальные ограничения с nulls distinct. -
models.E048:
constraints/indexes/unique_togetherссылается наCompositePrimaryKey<field name>, ноCompositePrimaryKeyне поддерживаются для этого варианта.
Команды управления
Следующие проверки проверяют, что пользовательские команды управления правильно сконфигурированы:
-
commands.E001: Команды
migrateиmakemigrationsдолжны иметь одинаковыйautodetector.
Безопасность
Проверки безопасности не обеспечивают безопасность вашего сайта. Они не проверяют код, не выполняют обнаружение вторжений и не выполняют ничего особенно сложного. Вместо этого они помогают выполнить автоматическую, простую проверку, которая может помочь улучшить безопасность вашего сайта.
Некоторые из этих проверок могут быть неподходящими для вашей конкретной конфигурации развертывания. Например, если перенаправление 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'. Если нет веских причин, чтобы ваш сайт передавался во фрейме, вам следует включить этот заголовок, чтобы помочь предотвратить атаки clickjacking. -
security.W003: Похоже, вы не используете встроенную защиту от поддельных межсайтовых запросов Django через middleware (
django.middleware.csrf.CsrfViewMiddlewareотсутствует в вашемMIDDLEWARE). Включение 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, так и по обычным соединениям, вы можете установить это значение в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затрудняет перехват сессий пользователей атаками XSS. -
security.W014: У вас есть
django.contrib.sessions.middleware.SessionMiddlewareв вашемMIDDLEWARE, но вы не установилиSESSION_COOKIE_HTTPONLYвTrue. Использование cookie сессии с атрибутомHttpOnlyзатрудняет перехват сессий пользователей атаками XSS. -
security.W015:
SESSION_COOKIE_HTTPONLYне установлено вTrue. Использование cookie сессии с атрибутомHttpOnlyзатрудняет перехват сессий пользователей атаками XSS. -
security.W016:
CSRF_COOKIE_SECUREне установлено вTrue. Использование безопасного-только CSRF cookie затрудняет перехват токена CSRF сетевыми шпионами. -
security.W017:
CSRF_COOKIE_HTTPONLYне установлено вTrue. Использование CSRF cookie с атрибутомHttpOnlyзатрудняет перехват токена CSRF атаками XSS. *Эта проверка удалена в 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]содержит менее 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в вашемTEMPLATES, но также указано'loaders'вOPTIONS. УдалитеAPP_DIRSили удалите опцию'loaders'. Эта проверка удалена в Django 5.1, так как проверки системы могут теперь вызыватьImproperlyConfiguredвместо этого. -
templates.E002:
string_if_invalidвTEMPLATESOPTIONSдолжен быть строкой, но получено:{value}({type}). -
templates.E003:
<name>используется для нескольких модулей тегов шаблонов:<module list>. Эта проверка была изменена наtemplates.W003в Django 4.1.2. -
templates.W003:
<name>используется для нескольких модулей тегов шаблонов:<module list>.
Перевод
Следующие проверки выполняются на вашей конфигурации перевода:
-
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, заканчивающимся на$. Удалите символ доллара изroute, чтобы избежать проблем при включении URL. -
urls.W002: Ваш шаблон URL
<pattern>имеетroute, начинающийся с/. Удалите эту косую черту, так как она не нужна. Если этот шаблон предназначен дляinclude(), убедитесь, что шаблонinclude()имеет конечную/. -
urls.W003: Ваш шаблон URL
<pattern>имеетname, включающий в себя:. Удалите двоеточие, чтобы избежать неоднозначных ссылок на пространство имен. -
urls.E004: Ваш шаблон URL
<pattern>некорректен. Убедитесь, что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
<pattern>имеет несоответствующее<angle bracket>.
contrib проверки приложений
admin
Проверки администратора выполняются в рамках тега admin.
Следующие проверки выполняются для любого зарегистрированного в админ-панели ModelAdmin (или его подкласса):
-
admin.E001: Значение
raw_id_fieldsдолжно быть списком или кортежем. -
admin.E002: Значение
raw_id_fields[n]ссылается на<field name>, которое не является полем<model>. -
admin.E003: Значение
raw_id_fields[n]должно быть внешним ключом или полем «многие ко многим». -
admin.E004: Значение
fieldsдолжно быть списком или кортежем. -
admin.E005: Оба
fieldsetsиfieldsуказаны. -
admin.E006: Значение
fieldsсодержит дублирующее(ые) поле(я). -
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<field name>, так как это поле вручную задаёт модель связи. -
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]ссылается на<field name>, которое не является полем<model>. -
admin.E020: Значение
filter_vertical[n]/filter_horizontal[n]должно быть полем «многие ко многим». -
admin.E021: Значение
radio_fieldsдолжно быть словарем. -
admin.E022: Значение
radio_fieldsссылается на<field name>, которое не является полем<model>. -
admin.E023: Значение
radio_fieldsссылается на<field name>, которое не является экземпляромForeignKeyи не имеет определенияchoices. -
admin.E024: Значение
radio_fields[<field name>]должно быть либоadmin.HORIZONTAL, либоadmin.VERTICAL. -
admin.E025: Значение
view_on_siteдолжно быть вызываемым или булевым значением. -
admin.E026: Значение
prepopulated_fieldsдолжно быть словарем. -
admin.E027: Значение
prepopulated_fieldsссылается на<field name>, которое не является полем<model>. -
admin.E028: Значение
prepopulated_fieldsссылается на<field name>, которое не должно быть полемDateTimeField,ForeignKey,OneToOneFieldилиManyToManyField. -
admin.E029: Значение
prepopulated_fields[<field name>]должно быть списком или кортежем. -
admin.E030: Значение
prepopulated_fieldsссылается на<field name>, которое не является полем<model>. -
admin.E031: Значение
orderingдолжно быть списком или кортежем. -
admin.E032: Значение
orderingимеет маркер случайной сортировки?, но также содержит и другие поля. -
admin.E033: Значение
orderingссылается на<field name>, которое не является полем<model>. -
admin.E034: Значение
readonly_fieldsдолжно быть списком или кортежем. -
admin.E035: Значение
readonly_fields[n]ссылается на<field_name>, которое не является вызываемым, атрибутом<ModelAdmin class>или атрибутом<model>. -
admin.E036: Значение
autocomplete_fieldsдолжно быть списком или кортежем. -
admin.E037: Значение
autocomplete_fields[n]ссылается на<field name>, которое не является полем<model>. -
admin.E038: Значение
autocomplete_fields[n]должно быть внешним ключом или полем «многие ко многим». -
admin.E039: Для модели
<model>должен быть зарегистрирован админ, чтобы на него ссылалось<modeladmin>.autocomplete_fields. -
admin.E040:
<modeladmin>должно определятьsearch_fields, так как на него ссылается<other_modeladmin>.autocomplete_fields.
ModelAdmin
Следующие проверки выполняются для любого зарегистрированного в админ-панели 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]ссылается на<field name>, которое нельзя редактировать через админ-панель. -
admin.E126: Значение
search_fieldsдолжно быть списком или кортежем. -
admin.E127: Значение
date_hierarchyссылается на<field name>, которое не ссылается на поле. -
admin.E128: Значение
date_hierarchyдолжно бытьDateFieldилиDateTimeField. -
admin.E129:
<modeladmin>должен определить методhas_<foo>_permission()для действия<action>. -
admin.E130: Атрибуты
__name__действий, определённых в<modeladmin>, должны быть уникальными. Имя<name>не уникально.
InlineModelAdmin
Следующие проверки выполняются для любого зарегистрированного вложенного InlineModelAdmin к ModelAdmin.
-
admin.E201: Нельзя исключить поле
<field name>, так как это внешний ключ к родительской модели<app_label>.<model>. -
admin.E202:
<model>не имеетForeignKeyк<parent model>./<model>имеет более одногоForeignKeyк<parent model>. Вы должны указать атрибут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, использующего поле типа содержимого<field name>и поле идентификатора объекта<field name>.
AdminSite
Следующие проверки выполняются для стандартного 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
-
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.
contenttypes
Следующие проверки выполняются, когда модель содержит GenericForeignKey или GenericRelation:
-
contenttypes.E001: Идентификатор объекта
GenericForeignKeyссылается на несуществующее поле<field>. -
contenttypes.E002: Тип содержимого
GenericForeignKeyссылается на несуществующее поле<field>. -
contenttypes.E003:
<field>не являетсяForeignKey. -
contenttypes.E004:
<field>не являетсяForeignKeyдляcontenttypes.ContentType. - contenttypes.E005: Имена моделей должны быть не более 100 символов.
postgres
Следующие проверки выполняются для полей модели django.contrib.postgres:
- postgres.E001: Базовое поле для массива содержит ошибки: …
- postgres.E002: Базовое поле для массива не может быть связанным полем.
-
postgres.E003: Значение по умолчанию для
<field>должно быть вызываемым объектом, а не экземпляром, чтобы оно не использовалось для всех экземпляров полей. Эта проверка была изменена наfields.E010в Django 3.1. - postgres.W004: Базовое поле для массива содержит предупреждения: …
sites
Следующие проверки выполняются для любой модели, использующей CurrentSiteManager:
-
sites.E001:
CurrentSiteManagerне смог найти поле с именем<field name>. -
sites.E002:
CurrentSiteManagerне может использовать<field>, так как это не поле внешнего ключа или многие-ко-многим.
Следующие проверки проверяют правильность настройки django.contrib.sites:
-
sites.E101: Настройка
SITE_IDдолжна быть целым числом.
staticfiles
Следующие проверки проверяют, что django.contrib.staticfiles настроен правильно:
-
staticfiles.E001: Настройка
STATICFILES_DIRSне является кортежем или списком. -
staticfiles.E002: Настройка
STATICFILES_DIRSне должна содержать настройкуSTATIC_ROOT. -
staticfiles.E003: Префикс
<prefix>в настройкеSTATICFILES_DIRSне должен оканчиваться на слеш. -
staticfiles.W004: Директория
<directory>в настройкеSTATICFILES_DIRSне существует. -
staticfiles.E005: Настройка
STORAGESдолжна определять хранилищеstaticfiles.
© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/5.2/ref/checks/