Spec-Zone.ru › Django 5.1

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

Система проверок фреймворка — это набор статических проверок для валидации проектов Django. Она обнаруживает распространённые проблемы и предоставляет подсказки по их исправлению. Фреймворк расширяем, поэтому вы можете легко добавить собственные проверки.

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

Справочник по API

CheckMessage

class CheckMessage(level, msg, hint=None, obj=None, id=None) [source]

Предупреждения и ошибки, вызываемые проверками системы, должны быть экземплярами 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) [source]
class Info(msg, hint=None, obj=None, id=None) [source]
class Warning(msg, hint=None obj=None, id=None) [source]
class Error(msg, hint=None, obj=None, id=None) [source]
class Critical(msg, hint=None, obj=None, id=None) [source]

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

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

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

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

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

Поля моделей

  • fields.E001: Имена полей не должны оканчиваться символом подчеркивания.
  • fields.E002: Имена полей не должны содержать "__".
  • fields.E003: pk — зарезервированное слово, которое нельзя использовать в качестве имени поля.
  • fields.E004: choices должно быть отображением (например, словарем) или итерируемым объектом (например, списком или кортежем).
  • fields.E005: choices должно быть отображением фактических значений на удобочитаемые имена или итерируемым объектом, содержащим (actual value, human readable name) кортежи.
  • fields.E006: db_index должно быть None, True или False.
  • fields.E007: Первичные ключи не должны содержать null=True.
  • fields.E008: Все validators должны быть вызываемыми.
  • fields.E009: max_length слишком мало для размещения самого длинного значения в choices (<count> символов).
  • fields.E010: Значение по умолчанию для <field> должно быть вызываемым объектом, а не экземпляром, чтобы оно не разделялось между всеми экземплярами поля.
  • fields.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, так как пустые значения хранятся как нулевые.
  • 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. *Эта проверка появилась в Django 4.2 и 5.0*
  • fields.E905: django.contrib.postgres.fields.CICharField удален, за исключением поддержки в исторических миграциях.
  • fields.W906: django.contrib.postgres.fields.CIEmailField устарел. Поддержка (кроме исторических миграций) будет удалена в Django 5.1. *Эта проверка появилась в Django 4.2 и 5.0*
  • fields.E906: django.contrib.postgres.fields.CIEmailField удален, за исключением поддержки в исторических миграциях.
  • fields.W907: django.contrib.postgres.fields.CITextField устарел. Поддержка (кроме исторических миграций) будет удалена в Django 5.1. *Эта проверка появилась в Django 4.2 и 5.0*
  • fields.E907: django.contrib.postgres.fields.CITextField удален, за исключением поддержки исторических миграций.

Поля файлов

  • 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, но не может быть пустым.
  • 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 должно быть списком или кортежем. Эта проверка появилась до Django 5.1.
  • models.E009: Все элементы index_together должны быть списками или кортежами. Эта проверка появилась до Django 5.1.
  • models.E010: unique_together должен быть списком или кортежем.
  • models.E011: Все элементы unique_together должны быть списками или кортежами.
  • models.E012: constraints/indexes/unique_together ссылается на несуществующее поле <field name>.
  • models.E013: constraints/indexes/unique_together ссылается на ManyToManyField <field name>, но ManyToManyField не поддерживаются для этого варианта.
  • models.E014: ordering должен быть кортежем или списком (даже если вы хотите сортировать только по одному полю).
  • models.E015: ordering ссылается на несуществующее поле, связанное поле или поиск <field name>.
  • models.E016: constraints/indexes/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'. Если нет веских причин для отображения сайта во фрейме, рекомендуется включить этот заголовок для предотвращения атак clickjacking.
  • security.W003: Похоже, вы не используете встроенную защиту от поддельных межсайтовых запросов Django через middleware (django.middleware.csrf.CsrfViewMiddleware отсутствует в вашем MIDDLEWARE). Включение middleware — самый безопасный подход, чтобы избежать уязвимостей.
  • security.W004: Вы не задали значение для настройки SECURE_HSTS_SECONDS. Если весь сайт доступен только через SSL, можно рассмотреть возможность установки значения и включения HTTP Strict Transport Security. Сначала ознакомьтесь с документацией; небрежное включение HSTS может привести к серьезным и необратимым проблемам.
  • security.W005: Вы не установили значение настройки SECURE_HSTS_INCLUDE_SUBDOMAINS в True. Без этого ваш сайт потенциально уязвим к атакам через небезопасное подключение к поддомену. Установите это значение в True только если уверены, что все поддомены вашего домена должны обслуживаться исключительно через SSL.
  • security.W006: Настройка SECURE_CONTENT_TYPE_NOSNIFF не установлена в True, поэтому ваши страницы не будут передаваться с заголовком 'X-Content-Type-Options: nosniff'. Рекомендуется включить этот заголовок для предотвращения неправильного определения типов контента браузером.
  • security.W007: Настройка SECURE_BROWSER_XSS_FILTER не установлена в True, поэтому ваши страницы не будут передаваться с заголовком 'X-XSS-Protection: 1; mode=block'. Рекомендуется включить этот заголовок для активации фильтрации XSS в браузере и защиты от атак XSS. Эта проверка удалена в Django 3.0, так как заголовок X-XSS-Protection больше не поддерживается современными браузерами.
  • security.W008: Настройка SECURE_SSL_REDIRECT не установлена в True. Если ваш сайт должен быть доступен как через SSL, так и без него, установите это значение в True или настройте балансировщик нагрузки или прокси-сервер для перенаправления всех подключений на HTTPS.
  • security.W009: Настройка SECRET_KEY содержит менее 50 символов, менее 5 уникальных символов или начинается с 'django-insecure-', что указывает на автоматическое создание её Django. Пожалуйста, сгенерируйте длинное и случайное значение, иначе многие критически важные для безопасности функции Django будут уязвимы к атакам.
  • security.W010: В вашем INSTALLED_APPS есть django.contrib.sessions, но вы не установили SESSION_COOKIE_SECURE в True. Использование куки сессии, доступной только через безопасное соединение, затрудняет перехват сессий пользователя злоумышленниками.
  • security.W011: В вашем MIDDLEWARE есть django.contrib.sessions.middleware.SessionMiddleware, но вы не установили SESSION_COOKIE_SECURE в True. Использование куки сессии, доступной только через безопасное соединение, затрудняет перехват сессий пользователя злоумышленниками.
  • security.W012: SESSION_COOKIE_SECURE не установлена в True. Использование куки сессии, доступной только через безопасное соединение, затрудняет перехват сессий пользователя злоумышленниками.
  • security.W013: В вашем INSTALLED_APPS есть django.contrib.sessions, но вы не установили SESSION_COOKIE_HTTPONLY в True. Использование куки сессии с атрибутом HttpOnly затрудняет перехват сессий пользователя с помощью атак XSS.
  • security.W014: В вашем MIDDLEWARE есть django.contrib.sessions.middleware.SessionMiddleware, но вы не установили SESSION_COOKIE_HTTPONLY в True. Использование куки сессии с атрибутом HttpOnly затрудняет перехват сессий пользователя с помощью атак XSS.
  • security.W015: SESSION_COOKIE_HTTPONLY не установлена в True. Использование куки сессии с атрибутом HttpOnly затрудняет перехват сессий пользователя с помощью атак XSS.
  • security.W016: CSRF_COOKIE_SECURE не установлена в True. Использование куки CSRF, доступной только через безопасное соединение, затрудняет перехват токена CSRF.
  • security.W017: CSRF_COOKIE_HTTPONLY не установлена в True. Использование куки CSRF с атрибутом HttpOnly затрудняет перехват токена CSRF с помощью атак XSS. Эта проверка удалена в Django 1.11, так как настройка CSRF_COOKIE_HTTPONLY не имеет практического преимущества.
  • security.W018: В развертывании не должно быть DEBUG установлена в True.
  • security.W019: В вашем MIDDLEWARE есть django.middleware.clickjacking.XFrameOptionsMiddleware, но 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'. Эта проверка удалена в Django 5.1, так как проверки системы теперь могут вызывать ImproperlyConfigured вместо этого.
  • 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> и поле ID объекта <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 символов.
  • auth.E013: Для использования django.contrib.auth.middleware.LoginRequiredMiddleware, django.contrib.auth.middleware.AuthenticationMiddleware должно быть определено перед ним в MIDDLEWARE.

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.
  • 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.1/ref/checks/

Spec-Zone.ru

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