Spec-Zone.ru › Django 5.0

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

Система проверок фреймворка — это набор статических проверок для валидации проектов 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.
  • files: Проверки конфигурации, связанной с файлами.
  • models: Проверки определений моделей, полей и менеджеров.
  • security: Проверки конфигурации безопасности.
  • signals: Проверки объявлений сигналов и регистрации обработчиков.
  • sites: Проверки конфигурации django.contrib.sites.
  • staticfiles: Проверки конфигурации django.contrib.staticfiles.
  • templates: Проверки конфигурации, связанной с шаблонами.
  • translation: Проверки конфигурации, связанной с переводами.
  • urls: Проверки конфигурации URL.

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

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

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

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

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

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

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

  • 2_0.W001: Ваш шаблон URL <pattern> имеет route который содержит (?P<, начинается с ^, или заканчивается на $. Вероятно, это произошло при миграции с url() до path().
  • 4_0.E001: Начиная с Django 4.0, значения в настройке CSRF_TRUSTED_ORIGINS должны начинаться со схемы (обычно http:// или https://), но найдено <hostname>.

Кэши

Следующие проверки проверяют правильную конфигурацию настройки CACHES:

  • caches.E001: Вы должны определить кэш 'default' в вашей настройке CACHES.
  • caches.W002: Ваша конфигурация <cache> может раскрыть ваш кэш или привести к повреждению данных, так как её LOCATION совпадает/внутри/содержит MEDIA_ROOT/STATIC_ROOT/STATICFILES_DIRS.
  • caches.W003: Ваш кэш <cache> LOCATION является относительным. Используйте абсолютный путь вместо него.

База данных

MySQL и MariaDB

Если вы используете MySQL или MariaDB, будут выполнены следующие проверки:

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

Управление файлами

Следующие проверки проверяют вашу настройку для Управление файлами:

  • files.E001: Настройка FILE_UPLOAD_TEMP_DIR ссылается на несуществующую директорию <path>.

Поля модели

  • fields.E001: Имена полей не должны оканчиваться на символ подчёркивания.
  • fields.E002: Имена полей не должны содержать "__".
  • fields.E003: pk — зарезервированное слово, которое нельзя использовать в качестве имени поля.
  • fields.E004: choices должно быть отображением (например, словарем) или итерируемым объектом (например, списком или кортежем).
  • fields.E005: choices должно быть отображением фактических значений на удобочитаемые имена или итерируемым объектом, содержащим кортежи (actual value, human readable name).
  • fields.E006: db_index должно быть None, True или False.
  • fields.E007: Первичные ключи не должны содержать null=True.
  • fields.E008: Все validators должны быть вызываемыми.
  • fields.E009: max_length слишком мало, чтобы вместить самое длинное значение в choices (<count> символов).
  • fields.E010: Значение по умолчанию <field> должно быть вызываемым объектом, а не экземпляром, чтобы оно не делилось между всеми экземплярами поля.
  • fields.E011: <database> не поддерживает значения по умолчанию базы данных с выражениями (db_default).
  • fields.E012: <expression> нельзя использовать в db_default.
  • fields.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 не могут иметь blank=True, если null=False, так как пустые значения хранятся как NULL.
  • fields.E160: Опции auto_now, auto_now_add, и default взаимоисключающие. Должна быть присутствовать только одна из них.
  • fields.W161: Предоставлено фиксированное значение по умолчанию.
  • fields.W162: <database> не поддерживает индекс базы данных для столбцов <field data type>.
  • fields.W163: <database> не поддерживает комментарии к столбцам (db_comment).
  • fields.E170: BinaryField’s default не может быть строкой. Используйте байтовый контент вместо этого.
  • fields.E180: <database> не поддерживает JSONField.
  • fields.E190: <database> не поддерживает сортировку базы данных для <field_type>.
  • fields.E220: <database> не поддерживает GeneratedField.
  • fields.E221: <database> не поддерживает неперсистентные GeneratedField.
  • fields.E222: <database> не поддерживает персистентные GeneratedField.
  • fields.E223: GeneratedField.output_field содержит ошибки: …
  • fields.W224: GeneratedField.output_field содержит предупреждения: …
  • fields.E900: IPAddressField удалён, за исключением поддержки в исторических миграциях.
  • fields.W900: IPAddressField устарел. Поддержка (кроме исторических миграций) будет удалена в Django 1.9. Эта проверка появилась в Django 1.7 и 1.8.
  • fields.W901: CommaSeparatedIntegerField устарел. Поддержка (кроме исторических миграций) будет удалена в Django 2.0. Эта проверка появилась в Django 1.10 и 1.11.
  • fields.E901: CommaSeparatedIntegerField удалён, за исключением поддержки в исторических миграциях.
  • fields.W902: FloatRangeField устарел и будет удалён в Django 3.1. Эта проверка появилась в Django 2.2 и 3.0.
  • fields.W903: NullBooleanField устарел. Поддержка (кроме исторических миграций) будет удалена в Django 4.0. Эта проверка появилась в Django 3.1 и 3.2.
  • fields.E903: NullBooleanField удалён, за исключением поддержки в исторических миграциях.
  • fields.W904: django.contrib.postgres.fields.JSONField устарел. Поддержка (кроме исторических миграций) будет удалена в Django 4.0. Эта проверка появилась в Django 3.1 и 3.2.
  • fields.E904: django.contrib.postgres.fields.JSONField удалён, за исключением поддержки в исторических миграциях.
  • fields.W905: django.contrib.postgres.fields.CICharField устарел. Поддержка (кроме исторических миграций) будет удалена в Django 5.1.
  • fields.W906: django.contrib.postgres.fields.CIEmailField устарел. Поддержка (кроме исторических миграций) будет удалена в Django 5.1.
  • fields.W907: django.contrib.postgres.fields.CITextField устарел. Поддержка (кроме исторических миграций) будет удалена в Django 5.1.

Поля файлов

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

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

  • fields.E300: Поле определяет отношение с моделью <model>, которая либо не установлена, либо является абстрактной.
  • fields.E301: Поле определяет отношение с моделью <app_label>.<model>, которая была заменена.
  • fields.E302: Обратный аксессор <related model>.<accessor name> для <app_label>.<model>.<field name> конфликтует с именем поля <app_label>.<model>.<field name>.
  • fields.E303: Имя обратного запроса для <app_label>.<model>.<field name> конфликтует с именем поля <app_label>.<model>.<field name>.
  • fields.E304: Обратный аксессор <related model>.<accessor name> для <app_label>.<model>.<field name> конфликтует с обратным аксессором для <app_label>.<model>.<field name>.
  • fields.E305: Имя обратного запроса для <app_label>.<model>.<field name> конфликтует с именем обратного запроса для <app_label>.<model>.<field name>.
  • fields.E306: Имя <name> является недопустимым related_name для поля <model>.<field name>.
  • 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, но не может быть 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. Эта проверка появилась до Django 4.0.
  • fields.W344: Промежуточная таблица поля <table name> конфликтует с именем таблицы <model>/<model>.<field name>.
  • fields.W345: related_name не оказывает влияния на ManyToManyField при симметричных отношениях, например, к «самому себе».
  • fields.W346: db_comment не оказывает влияния на ManyToManyField.

Модели

  • models.E001: <swappable> не имеет вида app_label.app_name.
  • models.E002: <SETTING> ссылается на <model>, которое не установлено или является абстрактным.
  • models.E003: Модель имеет две одинаковые связи «многие ко многим» через промежуточную модель <app_label>.<model>.
  • models.E004: id может использоваться только в качестве имени поля, если поле также задаёт primary_key=True.
  • models.E005: Поле <field name> из родительской модели <model> конфликтует с полем <field name> из родительской модели <model>.
  • models.E006: Поле <field name> конфликтует с полем <field name> из модели <model>.
  • models.E007: Поле <field name> имеет имя столбца <column name>, которое используется другим полем.
  • models.E008: index_together должно быть списком или кортежем.
  • models.E009: Все элементы index_together должны быть списками или кортежами.
  • models.E010: unique_together должно быть списком или кортежем.
  • models.E011: Все элементы unique_together должны быть списками или кортежами.
  • models.E012: constraints/indexes/index_together/unique_together ссылается на несуществующее поле <field name>.
  • models.E013: constraints/indexes/index_together/unique_together ссылается на ManyToManyField <field name>, но ManyToManyField не поддерживаются для этого параметра.
  • models.E014: ordering должно быть кортежем или списком (даже если вы хотите сортировать только по одному полю).
  • models.E015: ordering ссылается на несуществующее поле, связанное поле или поиск <field name>.
  • models.E016: constraints/indexes/index_together/unique_together ссылается на поле <field_name>, которое не является локальным для модели <model>.
  • models.E017: Модель-прокси <model> содержит поля модели.
  • models.E018: Автоматически сгенерированное имя столбца слишком длинное для поля <field>. Максимальная длина составляет <maximum length> для базы данных <alias>.
  • models.E019: Автоматически сгенерированное имя столбца слишком длинное для поля M2M <M2M field>. Максимальная длина составляет <maximum length> для базы данных <alias>.
  • models.E020: Метод <model>.check() в настоящее время перезаписан.
  • models.E021: ordering и order_with_respect_to не могут использоваться вместе.
  • models.E022: <function> содержит леническую ссылку на <app label>.<model>, но приложение <app label> не установлено или не предоставляет модель <model>.
  • models.E023: Имя модели <model> не может начинаться или заканчиваться подчёркиванием, так как это конфликтует с синтаксисом поиска запроса.
  • models.E024: Имя модели <model> не может содержать двойные подчёркивания, так как это конфликтует с синтаксисом поиска запроса.
  • models.E025: Свойство <property name> конфликтует с доступом к связанному полю.
  • models.E026: Модель не может иметь более одного поля с primary_key=True.
  • models.W027: <database> не поддерживает проверки ограничений.
  • models.E028: db_table <db_table> используется несколькими моделями: <model list>.
  • models.E029: Имя индекса <index> не уникально для модели <model>.
  • models.E030: Имя индекса <index> не уникально среди моделей: <model list>.
  • models.E031: Имя ограничения <constraint> не уникально для модели <model>.
  • models.E032: Имя ограничения <constraint> не уникально среди моделей: <model list>.
  • models.E033: Имя индекса <index> не может начинаться с подчёркивания или цифры.
  • models.E034: Имя индекса <index> не может быть длиннее <max_length> символов.
  • models.W035: db_table <db_table> используется несколькими моделями: <model list>.
  • models.W036: <database> не поддерживает уникальные ограничения с условиями.
  • models.W037: <database> не поддерживает индексы с условиями.
  • models.W038: <database> не поддерживает отложенные уникальные ограничения.
  • models.W039: <database> не поддерживает уникальные ограничения с колонками, не являющимися ключами.
  • models.W040: <database> не поддерживает индексы с колонками, не являющимися ключами.
  • models.E041: constraints ссылается на объединённое поле <field name>.
  • models.W042: Автоматически созданный первичный ключ используется при отсутствии определения типа первичного ключа, по умолчанию django.db.models.AutoField.
  • models.W043: <database> не поддерживает индексы по выражениям.
  • models.W044: <database> не поддерживает уникальные ограничения по выражениям.
  • models.W045: Ограничение проверки <constraint> содержит выражение RawSQL() и не будет проверено во время моделирования full_clean().
  • models.W046: <database> не поддерживает комментарии к таблицам (db_table_comment).
  • models.W047: <database> не поддерживает уникальные ограничения с разными значениями NULL.

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

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

Некоторые из этих проверок могут быть неподходящими для вашей конкретной конфигурации развертывания. Например, если вы выполняете перенаправление 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'. Если для вашего сайта нет веской причины передаваться в фрейме, рекомендуется включить этот заголовок для предотвращения атак кликджекинга.
  • security.W003: Похоже, вы не используете встроенную защиту от межсайтовых запросов с подделкой (CSRF) Django посредством middleware (django.middleware.csrf.CsrfViewMiddleware не включён в ваш MIDDLEWARE). Включение middleware — это самый безопасный подход, чтобы избежать уязвимостей.
  • security.W004: Вы не задали значение для настройки SECURE_HSTS_SECONDS. Если ваш сайт обслуживается только через SSL, можно установить значение и включить HTTP Strict Transport Security. Сначала обязательно прочтите документацию; неосторожное включение HSTS может привести к серьёзным и необратимым проблемам.
  • security.W005: Вы не задали настройку SECURE_HSTS_INCLUDE_SUBDOMAINS в значение True. Без этого ваш сайт потенциально уязвим к атакам через небезопасное соединение с поддоменом. Установите это значение в True только если уверены, что все поддомены вашего домена должны обслуживаться исключительно через SSL.
  • security.W006: Настройка SECURE_CONTENT_TYPE_NOSNIFF не установлена в значение True, поэтому ваши страницы не будут передаваться с заголовком 'X-Content-Type-Options: nosniff'. Рекомендуется включить этот заголовок, чтобы предотвратить неправильную идентификацию типов контента браузером.
  • security.W007: Настройка SECURE_BROWSER_XSS_FILTER не установлена в значение True, поэтому ваши страницы не будут передаваться с заголовком 'X-XSS-Protection: 1; mode=block'. Рекомендуется включить этот заголовок для активации фильтрации XSS браузером и предотвращения атак XSS. *Эта проверка удалена в Django 3.0, так как заголовок* X-XSS-Protection *больше не поддерживается современными браузерами.*
  • security.W008: Настройка SECURE_SSL_REDIRECT не установлена в значение True. Если ваш сайт должен быть доступен как по SSL, так и по обычным соединениям, следует установить это значение в True или настроить балансировщик нагрузки или обратный прокси-сервер для перенаправления всех соединений на HTTPS.
  • security.W009: У вашей настройки SECRET_KEY меньше 50 символов, меньше 5 уникальных символов или она начинается с 'django-insecure-', что указывает на автоматическое создание Django. Пожалуйста, сгенерируйте длинное и случайное значение, иначе многие критически важные для безопасности функции Django будут уязвимы к атакам.
  • security.W010: У вас есть django.contrib.sessions в вашем INSTALLED_APPS, но вы не задали значение SESSION_COOKIE_SECURE в True. Использование безопасного cookie-файла сессии затрудняет перехват сессий пользователей средствами анализа сетевого трафика.
  • security.W011: У вас есть django.contrib.sessions.middleware.SessionMiddleware в вашем MIDDLEWARE, но вы не задали значение SESSION_COOKIE_SECURE в True. Использование безопасного cookie-файла сессии затрудняет перехват сессий пользователей средствами анализа сетевого трафика.
  • security.W012: Настройка SESSION_COOKIE_SECURE не установлена в True. Использование безопасного cookie-файла сессии затрудняет перехват сессий пользователей средствами анализа сетевого трафика.
  • security.W013: У вас есть django.contrib.sessions в вашем INSTALLED_APPS, но вы не задали значение SESSION_COOKIE_HTTPONLY в True. Использование безопасного cookie-файла сессии затрудняет перехват сессий пользователя при атаках 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.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 не принимает правильное количество аргументов.
  • security.E102: Предварительный просмотр CSRF не может быть импортирован.

Сигналы

  • 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.

URL-адреса

Следующие проверки выполняются для вашей конфигурации URL-адресов:

  • urls.W001: Ваш шаблон URL-адреса <pattern> использует include() с route, оканчивающимся на $. Удалите символ доллара из route для избежания проблем при включении URL-адресов.
  • urls.W002: Ваш шаблон URL-адреса <pattern> содержит route, начинающийся со слэша /. Удалите этот слэш, так как он не нужен. Если этот шаблон предназначен для include(), убедитесь, что шаблон include() имеет заключительный /.
  • urls.W003: Ваш шаблон URL-адреса <pattern> содержит name, включающий двоеточие :. Удалите двоеточие для избежания неоднозначных ссылок на пространства имен.
  • urls.E004: Ваш шаблон URL-адреса <pattern> неверный. Убедитесь, что urlpatterns — это список экземпляров path() и/или re_path().
  • urls.W005: Пространство имен URL <namespace> не уникально. Возможно, не удастся обработать все URL-адреса в этом пространстве имён.
  • urls.E006: Параметр MEDIA_URL/ STATIC_URL должен заканчиваться слэшем.
  • urls.E007: Пользовательская функция просмотра handlerXXX 'path.to.view' не принимает необходимое количество аргументов (…).
  • urls.E008: Пользовательская функция просмотра handlerXXX 'path.to.view' не удалось импортировать.
  • urls.E009: Ваш шаблон URL-адреса <pattern> имеет неверную функцию просмотра, передайте <view>.as_view() вместо <view>.
  • urls.W010: Ваш шаблон URL-адреса <pattern> содержит несовпадающий <angle bracket>.

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

admin

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

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

  • admin.E001: Значение raw_id_fields должно быть списком или кортежем.
  • admin.E002: Значение raw_id_fields[n] относится к <field name>, что не является полем <model>.
  • admin.E003: Значение raw_id_fields[n] должно быть внешним ключом или полем «многие ко многим».
  • admin.E004: Значение fields должно быть списком или кортежем.
  • admin.E005: Оба fieldsets и fields указаны.
  • admin.E006: Значение fields содержит повторяющиеся поля.
  • admin.E007: Значение fieldsets должно быть списком или кортежем.
  • admin.E008: Значение fieldsets[n] должно быть списком или кортежем.
  • admin.E009: Значение fieldsets[n] должно иметь длину 2.
  • admin.E010: Значение fieldsets[n][1] должно быть словарем.
  • admin.E011: Значение fieldsets[n][1] должно содержать ключ fields.
  • admin.E012: В fieldsets[n][1] есть повторяющиеся поля.
  • admin.E013: Значение fields[n]/filter_horizontal[n]/filter_vertical[n]/fieldsets[n][m] не может включать ManyToManyField <field name>, потому что это поле вручную задает модель отношений.
  • admin.E014: Значение exclude должно быть списком или кортежем.
  • admin.E015: Значение exclude содержит повторяющиеся поля.
  • admin.E016: Значение form должно наследоваться от BaseModelForm.
  • admin.E017: Значение filter_vertical должно быть списком или кортежем.
  • admin.E018: Значение filter_horizontal должно быть списком или кортежем.
  • admin.E019: Значение filter_vertical[n]/filter_horizontal[n] относится к <field name>, что не является полем <model>.
  • admin.E020: Значение filter_vertical[n]/filter_horizontal[n] должно быть полем «многие ко многим».
  • admin.E021: Значение radio_fields должно быть словарем.
  • admin.E022: Значение radio_fields относится к <field name>, что не является полем <model>.
  • admin.E023: Значение radio_fields относится к <field name>, что не является экземпляром ForeignKey, и не имеет определения choices.
  • admin.E024: Значение radio_fields[<field name>] должно быть либо admin.HORIZONTAL, либо admin.VERTICAL.
  • admin.E025: Значение view_on_site должно быть вызываемым или булевым значением.
  • admin.E026: Значение prepopulated_fields должно быть словарем.
  • admin.E027: Значение prepopulated_fields относится к <field name>, что не является полем <model>.
  • admin.E028: Значение prepopulated_fields относится к <field name>, что не должно быть полем DateTimeField, ForeignKey, OneToOneField, или ManyToManyField.
  • admin.E029: Значение prepopulated_fields[<field name>] должно быть списком или кортежем.
  • admin.E030: Значение prepopulated_fields относится к <field name>, что не является полем <model>.
  • admin.E031: Значение ordering должно быть списком или кортежем.
  • admin.E032: Значение ordering имеет маркер случайного порядка ?, но также содержит и другие поля.
  • admin.E033: Значение ordering относится к <field name>, что не является полем <model>.
  • admin.E034: Значение readonly_fields должно быть списком или кортежем.
  • admin.E035: Значение readonly_fields[n] относится к <field_name>, что не является вызываемым, атрибутом <ModelAdmin class>, или атрибутом <model>.
  • admin.E036: Значение autocomplete_fields должно быть списком или кортежем.
  • admin.E037: Значение autocomplete_fields[n] относится к <field name>, что не является полем <model>.
  • admin.E038: Значение autocomplete_fields[n] должно быть внешним ключом или полем «многие ко многим».
  • admin.E039: Администратор для модели <model> должен быть зарегистрирован для использования в <modeladmin>.autocomplete_fields.
  • admin.E040: <modeladmin> должен определять search_fields, так как оно используется в <other_modeladmin>.autocomplete_fields.

ModelAdmin

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

  • admin.E101: Значение save_as должно быть булевым.
  • admin.E102: Значение save_on_top должно быть булевым.
  • admin.E103: Значение inlines должно быть списком или кортежем.
  • admin.E104: <InlineModelAdmin class> должен наследоваться от InlineModelAdmin.
  • admin.E105: <InlineModelAdmin class> должен иметь атрибут model.
  • admin.E106: Значение <InlineModelAdmin class>.model должно быть Model.
  • admin.E107: Значение list_display должно быть списком или кортежем.
  • admin.E108: Значение list_display[n] ссылается на <label>, которое не является вызываемым, атрибутом <ModelAdmin class>, или атрибутом или методом <model>.
  • admin.E109: Значение list_display[n] не должно быть полем "многие ко многим" или обратной внешней связью.
  • admin.E110: Значение list_display_links должно быть списком, кортежем или None.
  • admin.E111: Значение list_display_links[n] ссылается на <label>, которое не определено в list_display.
  • admin.E112: Значение list_filter должно быть списком или кортежем.
  • admin.E113: Значение list_filter[n] должно наследоваться от ListFilter.
  • admin.E114: Значение list_filter[n] не должно наследоваться от FieldListFilter.
  • admin.E115: Значение list_filter[n][1] должно наследоваться от FieldListFilter.
  • admin.E116: Значение list_filter[n] ссылается на <label>, которое не ссылается на поле.
  • admin.E117: Значение list_select_related должно быть булевым значением, кортежем или списком.
  • admin.E118: Значение list_per_page должно быть целым числом.
  • admin.E119: Значение list_max_show_all должно быть целым числом.
  • admin.E120: Значение list_editable должно быть списком или кортежем.
  • admin.E121: Значение list_editable[n] ссылается на <label>, которое не является полем <model>.
  • admin.E122: Значение list_editable[n] ссылается на <label>, которое не содержится в list_display.
  • admin.E123: Значение list_editable[n] не может находиться как в list_editable так и в list_display_links.
  • admin.E124: Значение list_editable[n] ссылается на первое поле в list_display (<label>), которое нельзя использовать, если list_display_links не задано.
  • admin.E125: Значение list_editable[n] ссылается на <field name>, которое не редактируется через админку.
  • admin.E126: Значение search_fields должно быть списком или кортежем.
  • admin.E127: Значение date_hierarchy ссылается на <field name>, которое не ссылается на поле.
  • admin.E128: Значение date_hierarchy должно быть DateField или DateTimeField.
  • admin.E129: <modeladmin> должен определять метод has_<foo>_permission() для действия <action>.
  • admin.E130: Атрибуты __name__ действий, определённых в <modeladmin> должны быть уникальными. Имя <name> не уникально.

InlineModelAdmin

Следующие проверки выполняются для любого InlineModelAdmin, зарегистрированного как вложенный на ModelAdmin.

  • admin.E201: Нельзя исключить поле <field name>, так как это внешняя ссылка на родительскую модель <app_label>.<model>.
  • admin.E202: <model> не имеет ForeignKey на <parent model>./ <model> имеет более одной ForeignKey на <parent model>. Необходимо указать атрибут fk_name.
  • admin.E203: Значение extra должно быть целым числом.
  • admin.E204: Значение max_num должно быть целым числом.
  • admin.E205: Значение min_num должно быть целым числом.
  • admin.E206: Значение formset должно наследоваться от BaseModelFormSet.

GenericInlineModelAdmin

Следующие проверки выполняются для любого GenericInlineModelAdmin, зарегистрированного как вложенный на ModelAdmin.

  • admin.E301: 'ct_field' ссылается на <label>, которое не является полем в <model>.
  • admin.E302: 'ct_fk_field' ссылается на <label>, которое не является полем в <model>.
  • admin.E303: <model> не имеет GenericForeignKey.
  • admin.E304: <model> не имеет GenericForeignKey используя поле типа содержимого <field name> и поле идентификатора объекта <field name>.

AdminSite

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

  • admin.E401: django.contrib.contenttypes должен быть в INSTALLED_APPS для использования приложения администрирования.
  • admin.E402: django.contrib.auth.context_processors.auth должен быть включён в DjangoTemplates (TEMPLATES), если используется стандартный бэкенд авторизации, для использования приложения администрирования.
  • admin.E403: Экземпляр django.template.backends.django.DjangoTemplates должен быть сконфигурирован в TEMPLATES для использования приложения администрирования.
  • admin.E404: django.contrib.messages.context_processors.messages должен быть включён в DjangoTemplates (TEMPLATES) для использования приложения администрирования.
  • admin.E405: django.contrib.auth должен быть в INSTALLED_APPS для использования приложения администрирования.
  • admin.E406: django.contrib.messages должен быть в INSTALLED_APPS для использования приложения администрирования.
  • admin.E408: django.contrib.auth.middleware.AuthenticationMiddleware должен быть в MIDDLEWARE для использования приложения администрирования.
  • admin.E409: django.contrib.messages.middleware.MessageMiddleware должен быть в MIDDLEWARE для использования приложения администрирования.
  • admin.E410: django.contrib.sessions.middleware.SessionMiddleware должен быть в MIDDLEWARE для использования приложения администрирования.
  • admin.W411: django.template.context_processors.request должен быть включён в DjangoTemplates (TEMPLATES) для использования боковой панели навигации администрирования.

auth

  • auth.E001: REQUIRED_FIELDS должен быть списком или кортежем.
  • auth.E002: Поле с именем USERNAME_FIELD для пользовательской модели не должно быть включено в REQUIRED_FIELDS.
  • auth.E003: <field> должен быть уникальным, поскольку он назван USERNAME_FIELD.
  • auth.W004: <field> названо USERNAME_FIELD, но не является уникальным.
  • auth.E005: Имя разрешения <codename> совпадает со встроенным разрешением для модели <model>.
  • auth.E006: Разрешение с именем <codename> дублируется для модели <model>.
  • auth.E007: verbose_name модели <model> должно содержать не более 244 символов, чтобы имена встроенных разрешений не превышали 255 символов.
  • auth.E008: Разрешение с именем <name> модели <model> превышает 255 символов.
  • auth.C009: <User model>.is_anonymous должно быть атрибутом или свойством, а не методом. Игнорирование этого является проблемой безопасности, так как анонимные пользователи будут рассматриваться как авторизованные!
  • auth.C010: <User model>.is_authenticated должно быть атрибутом или свойством, а не методом. Игнорирование этого является проблемой безопасности, так как анонимные пользователи будут рассматриваться как авторизованные!
  • auth.E011: Имя модели <model> должно содержать не более 93 символов, чтобы имена встроенных разрешений не превышали 100 символов.
  • auth.E012: Разрешение с именем <codename> модели <model> превышает 100 символов.

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> должно быть вызываемым объектом, а не экземпляром, чтобы оно не делилось между всеми экземплярами полей. В Django 3.1 эта проверка была изменена на fields.E010.
  • postgres.W004: Базовое поле для массива имеет предупреждения: …

sites

Для моделей, использующих CurrentSiteManager, выполняются следующие проверки:

  • sites.E001: CurrentSiteManager не смог найти поле с именем <field name>.
  • sites.E002: CurrentSiteManager не может использовать <field>, так как это не поле внешнего ключа или связи «многие ко многим».

Следующие проверки гарантируют правильную конфигурацию django.contrib.sites:

  • sites.E101: Настройка SITE_ID должна быть целым числом.

staticfiles

Следующие проверки гарантируют правильную конфигурацию django.contrib.staticfiles:

  • staticfiles.E001: Настройка STATICFILES_DIRS не является кортежем или списком.
  • staticfiles.E002: Настройка STATICFILES_DIRS не должна содержать настройку STATIC_ROOT.
  • staticfiles.E003: Префикс <prefix> в настройке STATICFILES_DIRS не должен заканчиваться слешем.
  • staticfiles.W004: Директория <directory> в настройке STATICFILES_DIRS не существует.
  • staticfiles.E005: Настройка STORAGES должна определять хранилище staticfiles.

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

Spec-Zone.ru

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