Spec-Zone.ru › Django 3.2

Система проверки фреймворка

Система проверки фреймворка представляет собой набор статических проверок для валидации проектов 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)

Встроенные теги

Системные проверки Django организованы с использованием следующих тегов:

  • admin: Проверки любых деклараций админского сайта.
  • async_support: Проверки конфигурации, связанной с асинхронностью.
  • caches: Проверки конфигурации, связанной с кэшем.
  • compatibility: Флаги потенциальных проблем с обновлениями версий.
  • database: Проверки проблем конфигурации, связанных с базой данных. Проверки базы данных не выполняются по умолчанию, потому что они делают больше, чем статический анализ кода, как это делают обычные проверки. Они выполняются только командой migrate или если вы укажете настроенные псевдонимы баз данных, используя опцию --database при вызове команды check.
  • models: Проверки определений моделей, полей и менеджеров.
  • security: Проверки конфигурации, связанной с безопасностью.
  • signals: Проверки деклараций сигналов и регистраций обработчиков.
  • sites: Проверки конфигурации django.contrib.sites.
  • staticfiles: Проверки конфигурации django.contrib.staticfiles.
  • templates: Проверки конфигурации, связанной с шаблонами.
  • translation: Проверки конфигурации, связанной с переводом.
  • urls: Проверки конфигурации URL.

Некоторые проверки могут быть зарегистрированы с несколькими тегами.

Изменено в Django 3.1:

Добавлен тег async_support.

Изменено в Django 3.1:

Проверки database теперь выполняются только для псевдонимов баз данных, указанных с помощью опции check --database.

Изменено в Django 3.2:

Добавлен тег sites.

Основные системные проверки

Поддержка асинхронности

Новое в Django 3.1.

Следующие проверки проверяют вашу настройку для Поддержки асинхронности:

  • async.E001: Не следует устанавливать переменную окружения DJANGO_ALLOW_ASYNC_UNSAFE в развертывании. Это отключает защиту от асинхронной безопасности.

Обратная совместимость

Проверки совместимости предупреждают о потенциальных проблемах, которые могут возникнуть после обновления Django.

  • 2_0.W001: Ваш шаблон URL <pattern> имеет route , который содержит (?P<, начинается с ^, или заканчивается $. Вероятно, это была ошибка при миграции из url() к path().

Кэши

Следующие проверки проверяют, правильно ли настроено ваше значение 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. Эта проверка была изменена в Django 3.1, так как фактический максимальный размер зависит от многих факторов.
  • mysql.W002: Режим строгости MySQL/MariaDB не установлен для подключения к базе данных <alias>. См. также Установка sql_mode.
  • mysql.W003: MySQL/MariaDB, возможно, не позволяет уникальным CharField иметь max_length > 255.

Поля моделей

  • 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 не принимают нулевые значения. Эта проверка появилась до поддержки нулевых значений в 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 не могут принимать пустые значения, если не разрешены нулевые значения, так как пустые значения хранятся как нулевые.
  • fields.E160: Параметры auto_now, auto_now_add, и default взаимоисключающие. Должен быть присутствовать только один из них.
  • fields.W161: Установлено фиксированное значение по умолчанию.
  • fields.W162: <database> не поддерживает индекс базы данных для столбцов <field data type>.
  • fields.E170: BinaryField’s default не может быть строкой. Используйте бинарное содержимое вместо этого.
  • 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.
  • fields.W904: django.contrib.postgres.fields.JSONField устарел. Поддержка (кроме исторических миграций) будет удалена в Django 4.0.

Файловые поля

  • fields.E200: unique — некорректный аргумент для FileField. Эта проверка удалена в Django 1.11.
  • fields.E201: primary_key — некорректный аргумент для FileField.
  • fields.E202: Аргумент FileField’s upload_to должен быть относительным путем, а не абсолютным.
  • fields.E210: Нельзя использовать ImageField, так как Pillow не установлен.

Связанные поля

  • fields.E300: Поле определяет связь с моделью <model>, которая не установлена или является абстрактной.
  • fields.E301: Поле определяет связь с моделью <app_label>.<model>, которая была заменена.
  • fields.E302: Доступ к полю <app_label>.<model>.<field name> конфликтует с полем <app_label>.<model>.<field name>.
  • fields.E303: Имя обратного запроса для поля <app_label>.<model>.<field name> конфликтует с полем <app_label>.<model>.<field name>.
  • fields.E304: Имя поля <app_label>.<model>.<field name> конфликтует с методом доступа для <app_label>.<model>.<field name>.
  • fields.E305: Имя поля <app_label>.<model>.<field name> конфликтует с именем обратного запроса для <app_label>.<model>.<field name>.
  • fields.E306: Имя related должно быть допустимым идентификатором Python или заканчиваться на '+'.
  • fields.E307: Поле <app label>.<model>.<field name> было объявлено со ссылкой на <app label>.<model>, но приложение <app label> не установлено или не предоставляет модель <model>.
  • fields.E308: Имя обратного запроса <related query name> не должно заканчиваться символом подчёркивания.
  • fields.E309: Имя обратного запроса <related query name> не должно содержать '__'.
  • fields.E310: Никакое подмножество полей <field1>, <field2>, … модели <model> не является уникальным.
  • fields.E311: <model>.<field name> должно быть уникальным, потому что оно ссылается на ForeignKey.
  • fields.E312: to_field <field name> не существует в связанной модели <app label>.<model>.
  • fields.E320: Поле указывает на on_delete=SET_NULL, но не может быть нулевым.
  • fields.E321: Поле указывает на on_delete=SET_DEFAULT, но не имеет значения по умолчанию.
  • fields.E330: ManyToManyField не могут быть уникальными.
  • fields.E331: Поле указывает на связь многие-ко-многим через модель <model>, которая не установлена.
  • fields.E332: Поля многие-ко-многим со промежуточными таблицами не должны быть симметричными. Эта проверка появилась до Django 3.0.
  • fields.E333: Модель используется как промежуточная модель в <model>, но она имеет более двух внешних ключей к <model>, что неоднозначно. Вы должны указать, какие два внешних ключа Django должен использовать, используя ключевой аргумент through_fields.
  • fields.E334: Модель используется как промежуточная модель в <model>, но она имеет более одного внешнего ключа от <model>, что неоднозначно. Вы должны указать, какой внешний ключ Django должен использовать, используя ключевой аргумент through_fields.
  • fields.E335: Модель используется как промежуточная модель в <model>, но она имеет более одного внешнего ключа к <model>, что неоднозначно. Вы должны указать, какой внешний ключ Django должен использовать, используя ключевой аргумент through_fields.
  • fields.E336: Модель используется как промежуточная модель в <model>, но она не имеет внешнего ключа к <model> или <model>.
  • fields.E337: Поле указывает на through_fields, но не предоставляет имена двух полей связи, которые должны быть использованы для связи через <model>.
  • fields.E338: Промежуточная модель <through model> не имеет поля <field name>.
  • fields.E339: <model>.<field name> не является внешним ключом к <model>.
  • fields.E340: Промежуточная таблица поля <table name> конфликтует с именем таблицы <model>/<model>.<field name>.
  • fields.W340: null не имеет влияния на ManyToManyField.
  • fields.W341: ManyToManyField не поддерживает validators.
  • fields.W342: Установка unique=True на ForeignKey имеет тот же эффект, что и использование OneToOneField.
  • fields.W343: limit_choices_to не влияет на ManyToManyField с моделью through.
  • fields.W344: Промежуточная таблица поля <table name> конфликтует с именем таблицы <model>/<model>.<field name>.

Модели

  • 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> модели <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> не поддерживает индексы на выражениях.

Безопасность

Проверки безопасности не делают ваш сайт безопасным. Они не аудитят код, не обнаруживают вторжения и не выполняют ничего особенно сложного. Вместо этого они помогают выполнить автоматизированную проверку простых вещей, которая может помочь вам улучшить безопасность вашего сайта.

Некоторые из этих проверок могут быть неприменимы к вашей конкретной конфигурации развертывания. Например, если перенаправление 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_BROWSER_XSS_FILTER, SECURE_REFERRER_POLICY и SECURE_SSL_REDIRECT не будут иметь эффекта.
  • security.W002: У вас нет django.middleware.clickjacking.XFrameOptionsMiddleware в вашем MIDDLEWARE, поэтому ваши страницы не будут передаваться с заголовком 'x-frame-options'. Если для вашего сайта нет веской причины передаваться во фрейме, вы должны рассмотреть возможность включения этого заголовка, чтобы помочь предотвратить атаки clickjacking.
  • security.W003: Похоже, вы не используете встроенную защиту Django от межсайтовых поддельных запросов (CSRF) через 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. Пожалуйста, сгенерируйте длинный и случайный SECRET_KEY, иначе многие критически важные для безопасности функции Django будут уязвимы к атакам.
  • security.W010: У вас есть django.contrib.sessions в вашем INSTALLED_APPS, но вы не установили SESSION_COOKIE_SECURE в значение True. Использование cookie сессии только для безопасного соединения затрудняет перехват сессий пользователей сетевыми анализаторами.
  • security.W011: У вас есть django.contrib.sessions.middleware.SessionMiddleware в вашем MIDDLEWARE, но вы не установили SESSION_COOKIE_SECURE в значение True. Использование cookie сессии только для безопасного соединения затрудняет перехват сессий пользователей сетевыми анализаторами.
  • security.W012: SESSION_COOKIE_SECURE не установлено в значение True. Использование cookie сессии только для безопасного соединения затрудняет перехват сессий пользователей сетевыми анализаторами.
  • security.W013: У вас есть django.contrib.sessions в вашем INSTALLED_APPS, но вы не установили SESSION_COOKIE_HTTPONLY в значение True. Использование cookie сессии только для безопасного соединения затрудняет перехват сессий пользователей атаками XSS.
  • security.W014: У вас есть django.contrib.sessions.middleware.SessionMiddleware в вашем MIDDLEWARE, но вы не установили SESSION_COOKIE_HTTPONLY в значение True. Использование cookie сессии только для безопасного соединения затрудняет перехват сессий пользователей атаками XSS.
  • security.W015: SESSION_COOKIE_HTTPONLY не установлено в значение True. Использование cookie сессии только для безопасного соединения затрудняет перехват сессий пользователей атаками XSS.
  • security.W016: CSRF_COOKIE_SECURE не установлено в значение True. Использование cookie CSRF только для безопасного соединения затрудняет перехват токена CSRF сетевыми анализаторами.
  • security.W017: CSRF_COOKIE_HTTPONLY не установлено в значение True. Использование cookie CSRF только для безопасного соединения затрудняет перехват токена CSRF атаками XSS. Эта проверка удалена в Django 1.11, так как настройка CSRF_COOKIE_HTTPONLY не приносит практической пользы.
  • security.W018: В развертывании не должно быть установлено DEBUG в значение True.
  • security.W019: У вас есть django.middleware.clickjacking.XFrameOptionsMiddleware в вашем MIDDLEWARE, но X_FRAME_OPTIONS не установлено в значение 'DENY'. Если нет веской причины отображать другие части сайта во фрейме, измените значение на 'DENY'.
  • security.W020: В развертывании ALLOWED_HOSTS не должно быть пустым.
  • security.W021: Вы не установили настройку SECURE_HSTS_PRELOAD в значение True. Без этого ваш сайт не может быть добавлен в список предварительной загрузки браузера.
  • security.W022: Вы не установили настройку SECURE_REFERRER_POLICY. Без неё ваш сайт не отправит заголовок Referrer-Policy. Вы должны рассмотреть возможность включения этого заголовка для защиты конфиденциальности пользователей.
  • security.E023: Вы установили настройку SECURE_REFERRER_POLICY в недопустимое значение.

Следующие проверки гарантируют, что ваши настройки, связанные с безопасностью, правильно сконфигурированы:

  • security.E100: DEFAULT_HASHING_ALGORITHM должно быть 'sha1' или 'sha256'.
  • 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}).

Перевод

Ниже приведены проверки, выполняемые для вашей конфигурации перевода:

  • 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' не удалось импортировать.

contrib проверки приложений

admin

Проверки администратора выполняются в рамках тега admin.

Ниже приведены проверки, выполняемые для любой ModelAdmin (или подкласса), зарегистрированной в админ-панели:

  • admin.E001: Значение raw_id_fields должно быть списком или кортежем.
  • admin.E002: Значение raw_id_fields[n] относится к <field name>, что не является атрибутом <model>.
  • admin.E003: Значение raw_id_fields[n] должно быть внешним ключом или полем «многие ко многим».
  • admin.E004: Значение fields должно быть списком или кортежем.
  • admin.E005: Оба fieldsets и fields указаны.
  • admin.E006: Значение fields содержит дублирующее(ые) поле(я).
  • admin.E007: Значение fieldsets должно быть списком или кортежем.
  • admin.E008: Значение fieldsets[n] должно быть списком или кортежем.
  • admin.E009: Значение fieldsets[n] должно иметь длину 2.
  • admin.E010: Значение fieldsets[n][1] должно быть словарем.
  • admin.E011: Значение fieldsets[n][1] должно содержать ключ fields.
  • admin.E012: В fieldsets[n][1] есть дублирующее(ые) поле(я).
  • admin.E013: fields[n]/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> и поле ID объекта <field name>.

AdminSite

Следующие проверки выполняются для стандартного AdminSite:

  • admin.E401: django.contrib.contenttypes должен быть в INSTALLED_APPS для использования приложения админки.
  • admin.E402: django.contrib.auth.context_processors.auth должен быть включён в DjangoTemplates (TEMPLATES), если используется стандартный backend аутентификации, чтобы использовать приложение админки.
  • 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: Объект ID 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.

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 не должен заканчиваться слешем.

© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/3.2/ref/checks/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API