Spec-Zone.ru › Django 5.2

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

Система проверок фреймворка представляет собой набор статических проверок для валидации проектов 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: Помечает потенциальные проблемы при обновлении версии.
  • commands: Проверки конфигурации, связанной с пользовательскими командами управления.
  • 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.E013: CompositePrimaryKey должно быть именем pk.
  • fields.E100: AutoField должны устанавливать primary_key=True.
  • fields.E110: BooleanField не принимают значения null. Эта проверка появилась до добавления поддержки значений null в 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 (кроме исторических миграций). Эта проверка появилась в 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, но не может быть 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.
  • fields.E347: Поле определяет связь с CompositePrimaryKey модели <model>, которая не поддерживается.

Модели

  • 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.E042: <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> не поддерживает уникальные ограничения с nulls distinct.
  • models.E048: constraints/indexes/unique_together ссылается на CompositePrimaryKey <field name>, но CompositePrimaryKey не поддерживаются для этого варианта.

Команды управления

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

  • commands.E001: Команды migrate и makemigrations должны иметь одинаковый autodetector.

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

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

Некоторые из этих проверок могут быть неподходящими для вашей конкретной конфигурации развертывания. Например, если перенаправление 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: У вас есть 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 сессии с атрибутом HttpOnly затрудняет перехват сессий пользователей атаками XSS.
  • security.W014: У вас есть django.contrib.sessions.middleware.SessionMiddleware в вашем MIDDLEWARE, но вы не установили SESSION_COOKIE_HTTPONLY в True. Использование cookie сессии с атрибутом HttpOnly затрудняет перехват сессий пользователей атаками XSS.
  • security.W015: SESSION_COOKIE_HTTPONLY не установлено в True. Использование cookie сессии с атрибутом HttpOnly затрудняет перехват сессий пользователей атаками XSS.
  • security.W016: CSRF_COOKIE_SECURE не установлено в True. Использование безопасного-только CSRF cookie затрудняет перехват токена CSRF сетевыми шпионами.
  • security.W017: CSRF_COOKIE_HTTPONLY не установлено в True. Использование CSRF cookie с атрибутом HttpOnly затрудняет перехват токена 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 '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> и поле идентификатора объекта <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: Идентификатор объекта 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.2/ref/checks/

Spec-Zone.ru

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