Spec-Zone.ru › Django 6.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: Указывает на потенциальные проблемы при обновлении версии.
  • commands: Проверки конфигурации, связанной с пользовательскими командами управления.
  • database: Проверки проблем конфигурации, связанных с базами данных. По умолчанию проверки баз данных не выполняются, поскольку они делают больше, чем статический анализ кода, как обычные проверки. Они выполняются только командой migrate или если при вызове команды check указать настроенные псевдонимы баз данных с помощью параметра --database.
  • 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: В параметре CACHES необходимо определить кэш 'default'.
  • caches.W002: Конфигурация <cache> может сделать ваш кэш доступным извне или привести к повреждению данных, поскольку его параметр LOCATION совпадает с/находится внутри/содержит MEDIA_ROOT/STATIC_ROOT/STATICFILES_DIRS.
  • caches.W003: Путь LOCATION кэша <cache> является относительным. Вместо него используйте абсолютный путь.

База данных

MySQL и MariaDB

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

  • mysql.E001: MySQL/MariaDB не позволяет задавать уникальным CharField значение max_length > 255. В Django 3.1 эта проверка была заменена на mysql.W003, поскольку фактический максимальный размер зависит от многих факторов.
  • mysql.W002: Для подключения к базе данных <alias> не включён строгий режим MySQL/MariaDB. См. также Настройка 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 должно быть установлено значение True либо у allow_files, либо у allow_folders.
  • 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: Значение default у BinaryField не может быть строкой. Вместо этого используйте содержимое в байтах.
  • 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 с симметричной связью, например с «self».
  • fields.W346: db_comment не влияет на ManyToManyField.
  • fields.E347: Поле задаёт связь с моделью <model>, у которой есть CompositePrimaryKey; такие связи не поддерживаются.
  • fields.E348: Связанное имя <related_name> для <model>.<field name> конфликтует с именем менеджера модели.

Модели

  • models.E001: <swappable> не соответствует формату app_label.app_name.
  • models.E002: <SETTING> ссылается на <model>, которое не установлено или является абстрактным.
  • models.E003: У модели есть две одинаковые связи «многие ко многим» через промежуточную модель <app_label>.<model>.
  • models.E004: id можно использовать в качестве имени поля, только если для этого поля также задано primary_key=True.
  • models.E005: Поле <field name> родительской модели <model> конфликтует с полем <field name> родительской модели <model>.
  • models.E006: Поле <field name> конфликтует с полем <field name> модели <model>.
  • models.E007: Имя столбца <column name> поля <field 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> слишком длинное. Максимальная длина для базы данных <alias> составляет <maximum length>.
  • models.E019: Автоматически сгенерированное имя столбца для поля M2M <M2M field> слишком длинное. Максимальная длина для базы данных <alias> составляет <maximum length>.
  • 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. Эта проверка появилась в Django 3.2–5.2.
  • models.W043: <database> не поддерживает индексы по выражениям.
  • models.W044: <database> не поддерживает уникальные ограничения по выражениям.
  • models.W045: Ограничение проверки <constraint> содержит выражение RawSQL() и не будет проверяться при full_clean() модели.
  • models.W046: <database> не поддерживает комментарии к таблицам (db_table_comment).
  • models.W047: <database> не поддерживает уникальные ограничения с различающимися значениями null.
  • 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: В MIDDLEWARE отсутствует django.middleware.security.SecurityMiddleware, поэтому параметры SECURE_HSTS_SECONDS, SECURE_CONTENT_TYPE_NOSNIFF, SECURE_REFERRER_POLICY, SECURE_CROSS_ORIGIN_OPENER_POLICY и SECURE_SSL_REDIRECT не будут действовать.
  • security.W002: В MIDDLEWARE отсутствует django.middleware.clickjacking.XFrameOptionsMiddleware, поэтому ваши страницы не будут передаваться с заголовком 'x-frame-options'. Если нет веской причины показывать ваш сайт во фрейме, рассмотрите возможность включения этого заголовка, чтобы предотвратить атаки clickjacking.
  • security.W003: Похоже, вы не используете встроенную в Django защиту от подделки межсайтовых запросов с помощью промежуточного ПО (django.middleware.csrf.CsrfViewMiddleware отсутствует в MIDDLEWARE). Включение промежуточного ПО — наиболее надёжный способ гарантировать, что в защите не останется уязвимостей.
  • security.W004: Для параметра SECURE_HSTS_SECONDS не задано значение. Если весь сайт доступен только через SSL, можно задать значение и включить строгую транспортную безопасность HTTP. Сначала обязательно прочитайте документацию: неосторожное включение 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. Использование cookie сеанса, доступного только через защищённое соединение, затрудняет перехват пользовательских сеансов средствами анализа сетевого трафика.
  • security.W011: В MIDDLEWARE есть django.contrib.sessions.middleware.SessionMiddleware, но для SESSION_COOKIE_SECURE не задано значение True. Использование cookie сеанса, доступного только через защищённое соединение, затрудняет перехват пользовательских сеансов средствами анализа сетевого трафика.
  • security.W012: Для SESSION_COOKIE_SECURE задано значение, отличное от True. Использование cookie сеанса, доступного только через защищённое соединение, затрудняет перехват пользовательских сеансов средствами анализа сетевого трафика.
  • security.W013: В INSTALLED_APPS есть django.contrib.sessions, но для SESSION_COOKIE_HTTPONLY не задано значение True. Использование cookie сеанса с атрибутом HttpOnly затрудняет перехват пользовательских сеансов при межсайтовых скриптовых атаках.
  • security.W014: В MIDDLEWARE есть django.contrib.sessions.middleware.SessionMiddleware, но для SESSION_COOKIE_HTTPONLY не задано значение True. Использование cookie сеанса с атрибутом HttpOnly затрудняет перехват пользовательских сеансов при межсайтовых скриптовых атаках.
  • security.W015: Для SESSION_COOKIE_HTTPONLY задано значение, отличное от True. Использование cookie сеанса с атрибутом HttpOnly затрудняет перехват пользовательских сеансов при межсайтовых скриптовых атаках.
  • security.W016: Для CSRF_COOKIE_SECURE задано значение, отличное от True. Использование cookie CSRF, доступного только через защищённое соединение, затрудняет кражу токена CSRF средствами анализа сетевого трафика.
  • security.W017: Для CSRF_COOKIE_HTTPONLY задано значение, отличное от True. Использование cookie CSRF с атрибутом HttpOnly затрудняет кражу токена CSRF при межсайтовых скриптовых атаках. Эта проверка удалена в 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.E026: Параметр CSP <SETTING_NAME> должен быть словарём (получено <value>).

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

  • 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: В параметре TEMPLATES задано 'APP_DIRS': True, но также указан параметр 'loaders' в OPTIONS. Удалите APP_DIRS или параметр 'loaders'. Эта проверка удалена в Django 5.1, поскольку системные проверки теперь могут вместо этого вызывать ImproperlyConfigured.
  • templates.E002: string_if_invalid в TEMPLATES OPTIONS должен быть строкой, получено: {value} ({type}).
  • templates.E003:<name> используется для нескольких модулей тегов шаблонов: <module list>. В Django 4.1.2 эта проверка была изменена на templates.W003.
  • 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: Пользовательское представление 'path.to.view' для handlerXXX принимает неверное количество аргументов (…).
  • urls.E008: Не удалось импортировать пользовательское представление 'path.to.view' для handlerXXX.
  • 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: Для ссылки из <modeladmin>.autocomplete_fields необходимо зарегистрировать администратора модели <model>.
  • 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: Для использования приложения администратора в TEMPLATES должен быть настроен экземпляр django.template.backends.django.DjangoTemplates.
  • 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> должно быть вызываемым объектом, а не экземпляром, чтобы оно не использовалось совместно всеми экземплярами поля. В Django 3.1 эта проверка была заменена на fields.E010.
  • postgres.W004: Предупреждения в базовом поле массива: …
  • postgres.E005: Для использования <django.contrib.postgres feature> необходимо указать 'django.contrib.postgres' в INSTALLED_APPS.

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/6.0/ref/checks/

Spec-Zone.ru

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