Рамка проверки системы¶
Фреймворк 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 не позволяет уникальным
CharFields иметьmax_length> 255. Эта проверка была изменена наmysql.W003в Django 3.1, так как реальный максимальный размер зависит от многих факторов. - mysql.W002: MySQL/MariaDB Strict Mode не установлен для соединения с базой данных
<alias>. См. также Установка sql_mode. - mysql.W003: MySQL/MariaDB может не разрешать уникальным
CharFields иметь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.E011:
<database>не поддерживает значения базы данных по умолчанию с выражениями (db_default). - fields.E012:
<expression>не может быть использован вdb_default. - fields.E100:
AutoFields должен установить primary_key=True. - fields.E110:
BooleanFields не принимает нулевые значения. Эта проверка появилась до того, как в Django 2.1. была добавлена поддержка нулевых значений - fields.E120:
CharFields должны определятьmax_lengthатрибут. - fields.E121:
max_lengthдолжно быть положительным целым числом. - fields.W122:
max_lengthигнорируется при использовании с<integer field type>. - fields.E130:
DecimalFields должны определятьdecimal_placesатрибут. - fields.E131:
decimal_placesдолжно быть неотрицательным целым числом. - fields.E132:
DecimalFields должны определятьmax_digitsатрибут. - fields.E133:
max_digitsдолжно быть положительным целым числом. - fields.E134:
max_digitsдолжно быть больше или равноdecimal_places. - fields.E140:
FilePathFields должны иметь либоallow_files, либо << 2 >>>, установленные в True. - fields.E150:
GenericIPAddressFields не может иметь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>не поддерживаетJSONFields. - fields.E190:
<database>не поддерживает collation базы данных на<field_type>s. - fields.E220:
<database>не поддерживаетGeneratedFields. - fields.E221:
<database>не поддерживает неперсистентныеGeneratedFields. - fields.E222:
<database>не поддерживает сохраняемыеGeneratedFields. - fields.E223:
GeneratedField.output_fieldимеет ошибки: … - fields.W224:
GeneratedField.output_fieldимеет предупреждения: … - fields.E900:
IPAddressFieldбыл удален, за исключением поддержки в исторических миграциях. - fields.W900:
IPAddressFieldбыл устаревшим. Его поддержка (за исключением исторических миграций) будет удалена в Django 1.9. Эта проверка появилась в Django 1.7 и 1.8. - fields.W901:
CommaSeparatedIntegerFieldбыл устаревшим. Его поддержка (за исключением исторических миграций) будет удалена в Django 2.0. Эта проверка появилась в Django 1.10 и 1.11. - fields.E901:
CommaSeparatedIntegerFieldудален, за исключением поддержки в исторических миграциях. - fields.W902:
FloatRangeFieldустарел и будет удален в Django 3.1. Эта проверка появилась в Django 2.2 и 3.0. - fields.W903:
NullBooleanFieldявляется устаревшим. Его поддержка (за исключением исторических миграций) будет удалена в Django 4.0. Эта проверка появилась в Django 3.1 и 3.2. - fields.E903:
NullBooleanFieldудален, за исключением поддержки в исторических миграциях. - fields.W904:
django.contrib.postgres.fields.JSONFieldявляется устаревшим. Его поддержка (за исключением исторических миграций) будет удалена в Django 4.0. Эта проверка появилась в Django 3.1 и 3.2. - fields.E904:
django.contrib.postgres.fields.JSONFieldудален, за исключением поддержки в исторических миграциях. - fields.W905:
django.contrib.postgres.fields.CICharFieldявляется устаревшим. Поддержка его (за исключением исторических миграций) будет удалена в Django 5.1. - 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: Аргумент
FileFieldupload_toдолжен быть относительным, а не абсолютным путем. - fields.E210: Невозможно использовать
ImageField, потому что Pillow не установлен.
Модели¶
- models.E001:
<swappable>не имеет формыapp_label.app_name. - models.E002:
<SETTING>ссылается на<model>, который не был установлен или является абстрактным. - models.E003: Модель имеет два одинаковых отношения «многие ко многим» через промежуточную модель
<app_label>.<model>. - models.E004:
idможно использовать в качестве имени поля, только если поле также задаетprimary_key=True. - models.E005: Поле
<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>, ноManyToManyFields не поддерживаются для этой опции. - 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). - models.W047:
<database>не поддерживает уникальные ограничения с нулями distinct.
Безопасность¶
Проверки безопасности не делают ваш сайт безопасным. Они не проводят аудит кода, не занимаются обнаружением вторжений и не делают ничего особенно сложного. Скорее, они помогают выполнить автоматизированную проверку, которая может помочь вам улучшить безопасность вашего сайта.
Некоторые из этих проверок могут не подходить для вашей конкретной конфигурации развертывания. Например, если вы выполняете перенаправление с 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. Использование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.
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>. - urls.W010: В вашем шаблоне URL
<pattern>есть несопоставимый<angle bracket>.
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]/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(<< 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не существует. - staticfiles.E005: Настройка
STORAGESдолжна определять хранилищеstaticfiles.