Рамка проверки системы¶
Фреймворк system check - это набор статических проверок для проверки проектов Django. Он обнаруживает распространенные проблемы и дает подсказки, как их устранить. Фреймворк является расширяемым, поэтому вы можете легко добавлять свои собственные проверки.
Подробнее о том, как добавить свои собственные проверки и интегрировать их с системными проверками Django, смотрите в System check topic guide.
Справочник по 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)[исходный код]¶
Встроенные теги¶
Системные проверки Django организованы с помощью следующих тегов:
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
. Это отключает async safety protection.
Обратная совместимость¶
Проверка совместимости предупреждает о потенциальных проблемах, которые могут возникнуть после обновления 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
s иметьmax_length
> 255. Эта проверка была изменена наmysql.W003
в Django 3.1, так как реальный максимальный размер зависит от многих факторов. - mysql.W002: MySQL/MariaDB Strict Mode не установлен для соединения с базой данных
<alias>
. См. также Установка sql_mode. - mysql.W003: MySQL/MariaDB может не разрешать уникальным
CharField
s иметь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>
default должен быть вызываемым, а не экземпляром, чтобы он не был общим для всех экземпляров поля. - fields.E100:
AutoField
s должен установить primary_key=True. - fields.E110:
BooleanField
s не принимает нулевые значения. Эта проверка появилась до того, как в Django 2.1. была добавлена поддержка нулевых значений - fields.E120:
CharField
s должны определятьmax_length
атрибут. - fields.E121:
max_length
должно быть положительным целым числом. - fields.W122:
max_length
игнорируется при использовании с<integer field type>
. - fields.E130:
DecimalField
s должны определятьdecimal_places
атрибут. - fields.E131:
decimal_places
должно быть неотрицательным целым числом. - fields.E132:
DecimalField
s должны определятьmax_digits
атрибут. - fields.E133:
max_digits
должно быть положительным целым числом. - fields.E134:
max_digits
должно быть больше или равноdecimal_places
. - fields.E140:
FilePathField
s должны иметь либоallow_files
, либо << 2 >>>, установленные в True. - fields.E150:
GenericIPAddressField
s не может иметьblank=True
, еслиnull=False
, так как пустые значения хранятся как нули. - fields.E160: Опции
auto_now
,auto_now_add
иdefault
являются взаимоисключающими. Только одна из этих опций может присутствовать. - fields.W161: Исправлено значение по умолчанию.
- fields.W162:
<database>
не поддерживает индекс базы данных на<field data type>
столбцах. - fields.W163:
<database>
не поддерживает комментарии к столбцам (db_comment
). - fields.E170:
BinaryField
“default
не может быть строкой. Вместо этого используйте содержимое байта. - fields.E180:
<database>
не поддерживаетJSONField
s. - fields.E190:
<database>
не поддерживает collation базы данных на<field_type>
s. - 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: Аргумент
FileField
upload_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: Поле
<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
s не поддерживаются для этой опции. - 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 защиту от подделки межсайтовых запросов через промежуточное ПО (
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
. Использование куки-файлов только для защищенных сеансов затрудняет перехват сеансов пользователя снифферами сетевого трафика. - security.W011: У вас
django.contrib.sessions.middleware.SessionMiddleware
вMIDDLEWARE
, но вы не установилиSESSION_COOKIE_SECURE
вTrue
. Использование куки-файлов только для защищенных сеансов затрудняет перехват сеансов пользователя снифферами сетевого трафика. - security.W012:
SESSION_COOKIE_SECURE
не установлено вTrue
. Использование куки-файла только для защищенных сеансов затрудняет перехват сеансов пользователя программами-снифферами сетевого трафика. - security.W013: У вас есть
django.contrib.sessions
вINSTALLED_APPS
, но вы не установилиSESSION_COOKIE_HTTPONLY
вTrue
. Использование куки сеансаHttpOnly
усложняет атаки межсайтового скриптинга для перехвата сеансов пользователя. - security.W014: У вас есть
django.contrib.sessions.middleware.SessionMiddleware
вMIDDLEWARE
, но вы не установилиSESSION_COOKIE_HTTPONLY
вTrue
. Использование куки сеансаHttpOnly
усложняет атаки межсайтового скриптинга для перехвата сеансов пользователя. - security.W015:
SESSION_COOKIE_HTTPONLY
не установлено вTrue
. Использование куки сеансаHttpOnly
затрудняет перехват сеансов пользователя атаками межсайтового скриптинга. - security.W016:
CSRF_COOKIE_SECURE
не установлено вTrue
. Использование CSRF-куки только с защитой делает более сложным для снифферов сетевого трафика украсть CSRF-токен. - security.W017:
CSRF_COOKIE_HTTPONLY
не установлено значениеTrue
. ИспользованиеHttpOnly
CSRF 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
вTEMPLATES
OPTIONS
должно быть строкой, но получено:{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
.
URLs¶
Следующие проверки выполняются для вашей конфигурации 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()
и/или << 3 >>>. - 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
app checks¶
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
и << 1 >>>. - 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]
должно быть полем типа «многие ко многим». - 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]
должно быть внешним ключом или полем типа «многие ко многим». - 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
(<< 2 >>>), если используется бэкенд auth по умолчанию, чтобы использовать приложение администратора. - 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>
default должен быть callable вместо экземпляра, чтобы он не был общим для всех экземпляров поля. Эта проверка была изменена на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
не существует.