Фреймворк проверки системы
Фреймворк проверки системы представляет собой набор статических проверок для валидации проектов Django. Он обнаруживает распространенные проблемы и предоставляет подсказки о том, как их исправить. Фреймворк расширяем, поэтому вы можете легко добавлять собственные проверки.
Для получения подробной информации о том, как добавить собственные проверки и интегрировать их с проверками системы Django, см. Руководство по теме проверок системы.
API-справочник
CheckMessage
-
class CheckMessage(level, msg, hint=None, obj=None, id=None)
Предупреждения и ошибки, вызываемые проверками системы, должны быть экземплярами 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)
-
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)
Встроенные теги
-
admin: Проверки любых объявлений административного сайта. -
async_support: Проверки конфигурации, связанной с асинхронностью. -
caches: Проверки конфигурации, связанной с кэшем. -
compatibility: Отмечает потенциальные проблемы с обновлениями версий. -
database: Проверки проблем, связанных с конфигурацией базы данных. Проверки базы данных не выполняются по умолчанию, поскольку они делают больше, чем статический анализ кода, как обычные проверки. Они выполняются только командойmigrateили если вы указываете настроенные псевдонимы баз данных с помощью параметра--databaseпри вызове командыcheck. -
files: Проверки конфигурации, связанной с файлами. -
models: Проверки определений моделей, полей и менеджеров. -
security: Проверки конфигурации, связанной с безопасностью. -
signals: Проверки объявлений сигналов и регистраций обработчиков. -
sites: Проверки конфигурацииdjango.contrib.sites. -
staticfiles: Проверки конфигурацииdjango.contrib.staticfiles. -
templates: Проверки конфигурации, связанной с шаблонами. -
translation: Проверки конфигурации, связанной с переводами. -
urls: Проверки конфигурации URL.
Некоторые проверки могут быть зарегистрированы с несколькими тегами.
Основные проверки системы
Асинхронная поддержка
Следующие проверки проверяют вашу настройку для Асинхронной поддержки:
-
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.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:
BinaryFielddefaultне может быть строкой. Используйте байтовые данные. -
fields.E180:
<database>не поддерживаетJSONField. -
fields.E190:
<database>не поддерживает сортировку базы данных для<field_type>. -
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. -
fields.W906:
django.contrib.postgres.fields.CIEmailFieldустарел. Поддержка (за исключением исторических миграций) будет удалена в Django 5.1. -
fields.W907:
django.contrib.postgres.fields.CITextFieldустарел. Поддержка (за исключением исторических миграций) будет удалена в Django 5.1.
Поля файлов
-
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должен быть списком или кортежем. -
models.E009: Все элементы
index_togetherдолжны быть списками или кортежами. -
models.E010:
unique_togetherдолжен быть списком или кортежем. -
models.E011: Все элементы
unique_togetherдолжны быть списками или кортежами. -
models.E012:
constraints/indexes/index_together/unique_togetherссылается на несуществующее поле<field name>. -
models.E013:
constraints/indexes/index_together/unique_togetherссылается наManyToManyField<field name>, ноManyToManyFieldне поддерживаются для этого параметра. -
models.E014:
orderingдолжен быть кортежем или списком (даже если вы хотите упорядочить только по одному полю). -
models.E015:
orderingссылается на несуществующее поле, связанное поле или поиск<field name>. -
models.E016:
constraints/indexes/index_together/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.W042: Автоматически созданный первичный ключ используется, если не определен тип первичного ключа, по умолчанию
django.db.models.AutoField. -
models.W043:
<database>не поддерживает индексы для выражений. -
models.W044:
<database>не поддерживает уникальные ограничения для выражений. -
models.W045: Ограничение проверки
<constraint>содержит выражениеRawSQL()и не будет проверено во времяfull_clean()модели. -
models.W046:
<database>не поддерживает комментарии к таблицам (db_table_comment).
Безопасность
Проверки безопасности не делают ваш сайт безопасным. Они не проверяют код, не выполняют обнаружение вторжений и не делают ничего особенно сложного. Скорее, они помогают выполнить автоматизированный контрольный список простых задач, который может помочь вам улучшить безопасность вашего сайта.
Некоторые из этих проверок могут быть неподходящими для вашей конкретной конфигурации развертывания. Например, если вы выполняете перенаправление 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, так и через соединения без 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. ИспользованиеHttpOnlycookie сессии затрудняет перехват сессий пользователей атаками межсайтового скриптинга. -
security.W014: У вас есть
django.contrib.sessions.middleware.SessionMiddlewareв вашемMIDDLEWARE, но вы не установилиSESSION_COOKIE_HTTPONLYвTrue. ИспользованиеHttpOnlycookie сессии затрудняет перехват сессий пользователей атаками межсайтового скриптинга. -
security.W015:
SESSION_COOKIE_HTTPONLYне установлен вTrue. ИспользованиеHttpOnlycookie сессии затрудняет перехват сессий пользователей атаками межсайтового скриптинга. -
security.W016:
CSRF_COOKIE_SECUREне установлен вTrue. Использование CSRF-cookie только для защищенных соединений затрудняет перехват токена CSRF сетевыми перехватчиками. -
security.W017:
CSRF_COOKIE_HTTPONLYне установлен вTrue. ИспользованиеHttpOnlyCSRF-cookie затрудняет перехват токена 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]содержит менее 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'. -
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>.
contrib проверки приложений
admin
Все проверки администратора выполняются как часть тега admin.
Следующие проверки выполняются для любого ModelAdmin (или подкласса), зарегистрированного на сайте администратора:
-
admin.E001: Значение
raw_id_fieldsдолжно быть списком или кортежем. -
admin.E002: Значение
raw_id_fields[n]ссылается на<field name>, что не является полем<model>. -
admin.E003: Значение
raw_id_fields[n]должно быть внешним ключом или полем many-to-many. -
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]/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]должно быть полем many-to-many. -
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]не является вызываемым объектом, атрибутом<ModelAdmin class>или атрибутом<model>. -
admin.E036: Значение
autocomplete_fieldsдолжно быть списком или кортежем. -
admin.E037: Значение
autocomplete_fields[n]ссылается на<field name>, что не является полем<model>. -
admin.E038: Значение
autocomplete_fields[n]должно быть внешним ключом или полем many-to-many. -
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]не должно быть полемManyToManyField. -
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 символов.
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>, так как это не внешний ключ или поле many-to-many.
Следующие проверки гарантируют, что 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не существует.
© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/4.2/ref/checks/