Spec-Zone.ru › Django 4.1

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

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

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

Справочник API

CheckMessage

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

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

Аргументы конструктора:

level
Уровень серьёзности сообщения. Используйте одно из предопределённых значений: DEBUG, INFO, WARNING, ERROR, CRITICAL. Если уровень не ниже ERROR, Django не позволит выполнить команды управления. Сообщения с уровнем ниже ERROR (т.е. предупреждения) отображаются в консоли, но могут быть отключены.
msg
Короткий (менее 80 символов) строковый опис проблемы. Строка не должна содержать символы новой строки.
hint
Строка из одной строки, предоставляющая подсказку по исправлению проблемы. Если подсказку предоставить невозможно или она очевидна из сообщения об ошибке, подсказку можно опустить или использовать значение None.
obj
Необязательно. Объект, предоставляющий контекст для сообщения (например, модель, где была обнаружена проблема). Объект должен быть моделью, полем, менеджером или любым другим объектом, который определяет метод __str__(). Метод используется при отображении всех сообщений, и его результат предшествует сообщению.
id
Необязательная строка. Уникальный идентификатор проблемы. Идентификаторы должны следовать шаблону applabel.X001, где X — одна из букв CEWID, указывающая на уровень серьёзности сообщения (C для критических, E для ошибок и так далее). Число может быть назначено приложением, но должно быть уникальным в рамках этого приложения.

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

class Debug(msg, hint=None, obj=None, id=None)
class Info(msg, hint=None, obj=None, id=None)
class Warning(msg, hint=None obj=None, id=None)
class Error(msg, hint=None, obj=None, id=None)
class Critical(msg, hint=None, obj=None, id=None)

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

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

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

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

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

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

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

Поддержка асинхронных операций

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

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

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

Новое в Django 4.0.

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

  • 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.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.E170: BinaryField’s default не может быть строкой. Используйте байтовый контент вместо этого.
  • fields.E180: <database> не поддерживает JSONField.
  • fields.E190: <database> не поддерживает сортировку базы данных по <field_type>.
  • fields.E900: IPAddressField удален, за исключением поддержки в исторических миграциях.
  • fields.W900: IPAddressField устарел. Поддержка его (кроме исторических миграций) будет удалена в Django 1.9. Эта проверка появилась в Django 1.7 и 1.8.
  • fields.W901: CommaSeparatedIntegerField устарел. Поддержка его (кроме исторических миграций) будет удалена в Django 2.0. Эта проверка появилась в Django 1.10 и 1.11.
  • fields.E901: CommaSeparatedIntegerField удален, за исключением поддержки в исторических миграциях.
  • fields.W902: FloatRangeField устарел и будет удален в Django 3.1. Эта проверка появилась в Django 2.2 и 3.0.
  • fields.W903: NullBooleanField устарел. Поддержка его (кроме исторических миграций) будет удалена в Django 4.0. Эта проверка появилась в 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.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 с симметричной связью, например, с "самим собой".

Модели

  • models.E001: <swappable> не имеет формы app_label.app_name.
  • models.E002: <SETTING> ссылается на <model>, которое не установлено или является абстрактным.
  • models.E003: Модель имеет две идентичные связи многие-ко-многим через промежуточную модель <app_label>.<model>.
  • models.E004: id может быть использовано только в качестве имени поля, если поле также задаёт primary_key=True.
  • models.E005: Поле <field name> из родительской модели <model> конфликтует с полем <field name> из родительской модели <model>.
  • models.E006: Поле <field name> конфликтует с полем <field name> из модели <model>.
  • models.E007: Поле <field name> имеет имя столбца <column name>, используемое другим полем.
  • models.E008: index_together должно быть списком или кортежем.
  • models.E009: Все элементы index_together должны быть списками или кортежами.
  • models.E010: unique_together должно быть списком или кортежем.
  • models.E011: Все элементы unique_together должны быть списками или кортежами.
  • models.E012: constraints/indexes/index_together/unique_together ссылается на несуществующее поле <field name>.
  • models.E013: constraints/indexes/index_together/unique_together ссылается на ManyToManyField <field name>, но ManyToManyField для этого варианта не поддерживаются.
  • models.E014: ordering должно быть кортежем или списком (даже если вы хотите сортировать только по одному полю).
  • models.E015: ordering ссылается на несуществующее поле, связанное поле или поиск <field name>.
  • models.E016: constraints/indexes/index_together/unique_together ссылается на поле <field_name>, которое не локально для модели <model>.
  • models.E017: Модель-прокси <model> содержит поля модели.
  • models.E018: Сгенерированное имя столбца слишком длинное для поля <field>. Максимальная длина — <maximum length> для базы данных <alias>.
  • models.E019: Сгенерированное имя столбца слишком длинное для поля связи многие-ко-многим <M2M 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().

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

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

Некоторые из этих проверок могут быть неподходящими для вашей конкретной конфигурации развертывания. Например, если перенаправление 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 от межсайтовых атак с подделкой запроса (CSRF) через middleware (django.middleware.csrf.CsrfViewMiddleware не включен в ваш MIDDLEWARE). Включение middleware — это самый безопасный подход для предотвращения уязвимостей.
  • security.W004: Вы не задали значение для настройки SECURE_HSTS_SECONDS. Если весь ваш сайт обслуживается только через SSL, вы можете рассмотреть возможность установки значения и включения HTTP Strict Transport Security. Не забудьте сначала ознакомиться с документацией; необдуманное включение HSTS может привести к серьезным и необратимым проблемам.
  • security.W005: Вы не установили настройку SECURE_HSTS_INCLUDE_SUBDOMAINS в значение True. Без этого ваш сайт потенциально уязвим к атакам через небезопасное подключение к дочернему домену. Установите это значение в True только если уверены, что все поддомены вашего домена должны обслуживаться исключительно через SSL.
  • security.W006: Ваша настройка SECURE_CONTENT_TYPE_NOSNIFF не установлена в значение True, поэтому ваши страницы не будут передаваться с заголовком 'X-Content-Type-Options: nosniff'. Рекомендуется включить этот заголовок, чтобы предотвратить неправильную идентификацию типов контента браузером.
  • security.W007: Ваша настройка SECURE_BROWSER_XSS_FILTER не установлена в значение X-XSS-Protection, поэтому ваши страницы не будут передаваться с заголовком 'X-XSS-Protection: 1; mode=block'. Рекомендуется включить этот заголовок для активации фильтрации XSS в браузере и предотвращения атак XSS. *Этот проверка удалена в Django 3.0, так как заголовок *X-XSS-Protection *больше не поддерживается современными браузерами.*
  • security.W008: Ваша настройка SECURE_SSL_REDIRECT не установлена в значение True. Если ваш сайт не должен быть доступен как по SSL, так и по обычным подключениям, вы можете установить это значение в True или настроить балансировщик нагрузки или прокси-сервер для перенаправления всех подключений на HTTPS.
  • security.W009: Ваша настройка SECRET_KEY содержит менее 50 символов, менее 5 уникальных символов или начинается с 'django-insecure-', что указывает на автоматическую генерацию Django. Пожалуйста, сгенерируйте длинное и случайное значение, иначе многие критически важные для безопасности функции Django будут уязвимы к атакам.
  • security.W010: У вас есть django.contrib.sessions в вашем INSTALLED_APPS, но вы не установили SESSION_COOKIE_SECURE в True. Использование cookie сессии только для защищенных соединений затрудняет перехват сессий пользователей средствами перехвата сетевого трафика.
  • security.W011: У вас есть django.contrib.sessions.middleware.SessionMiddleware в вашем MIDDLEWARE, но вы не установили SESSION_COOKIE_SECURE в True. Использование cookie сессии только для защищенных соединений затрудняет перехват сессий пользователей средствами перехвата сетевого трафика.
  • security.W012: SESSION_COOKIE_SECURE не установлена в True. Использование cookie сессии только для защищенных соединений затрудняет перехват сессий пользователей средствами перехвата сетевого трафика.
  • security.W013: У вас есть django.contrib.sessions в вашем INSTALLED_APPS, но вы не установили SESSION_COOKIE_HTTPONLY в True. Использование cookie сессии только для защищенных соединений затрудняет перехват сессий пользователей с помощью атак XSS.
  • security.W014: У вас есть django.contrib.sessions.middleware.SessionMiddleware в вашем MIDDLEWARE, но вы не установили SESSION_COOKIE_HTTPONLY в True. Использование cookie сессии только для защищенных соединений затрудняет перехват сессий пользователей с помощью атак XSS.
  • security.W015: SESSION_COOKIE_HTTPONLY не установлена в True. Использование cookie сессии только для защищенных соединений затрудняет перехват сессий пользователей с помощью атак XSS.
  • security.W016: CSRF_COOKIE_SECURE не установлена в True. Использование cookie CSRF только для защищенных соединений затрудняет перехват токена CSRF средствами перехвата сетевого трафика.
  • security.W017: CSRF_COOKIE_HTTPONLY не установлена в True. Использование cookie CSRF только для защищенных соединений затрудняет перехват токена CSRF с помощью атак XSS. *Эта проверка удалена в Django 1.11, так как настройка* CSRF_COOKIE_HTTPONLY *не имеет практической пользы.*
  • security.W018: В развертывании не должно быть установлено DEBUG в значение True.
  • security.W019: У вас есть django.middleware.clickjacking.XFrameOptionsMiddleware в вашем MIDDLEWARE, но X_FRAME_OPTIONS не установлена в 'DENY'. Если нет веских причин для отображения других частей вашего сайта во фрейме, измените это на 'DENY'.
  • security.W020: В развертывании ALLOWED_HOSTS не должна быть пустой.
  • security.W021: Вы не установили настройку SECURE_HSTS_PRELOAD в True. Без этого ваш сайт не может быть добавлен в список предварительной загрузки браузера.
  • security.W022: Вы не задали настройку SECURE_REFERRER_POLICY. Без нее ваш сайт не будет отправлять заголовок Referrer-Policy. Рекомендуется включить этот заголовок для защиты конфиденциальности пользователей.
  • security.E023: Вы установили настройку SECURE_REFERRER_POLICY в недопустимое значение.
  • security.E024: Вы установили настройку SECURE_CROSS_ORIGIN_OPENER_POLICY в недопустимое значение.
  • security.W025: Ваша настройка SECRET_KEY_FALLBACKS[n] содержит менее 50 символов, менее 5 уникальных символов или начинается с 'django-insecure-', что указывает на автоматическую генерацию Django. Пожалуйста, сгенерируйте длинное и случайное значение, иначе многие критически важные для безопасности функции Django будут уязвимы к атакам.

Следующие проверки гарантируют правильную конфигурацию ваших настроек безопасности:

  • security.E100: DEFAULT_HASHING_ALGORITHM должен быть 'sha1' или 'sha256'. *Эта проверка появилась в Django 3.1 и 3.2.*
  • security.E101: Просмотр CSRF ошибки 'path.to.view' не принимает правильное количество аргументов.
  • security.E102: Просмотр CSRF ошибки 'path.to.view' не удалось импортировать.

Сигналы

  • signals.E001: <handler> был подключен к сигналу <signal> с леничной ссылкой на отправителя <app label>.<model>, но приложение <app label> не установлено или не предоставляет модель <model>.

Шаблоны

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

  • templates.E001: У вас есть 'APP_DIRS': True в вашем TEMPLATES, но также указан 'loaders' в OPTIONS. Удалите APP_DIRS или удалите опцию 'loaders'.
  • templates.E002: string_if_invalid в TEMPLATES OPTIONS должен быть строкой, а получено: {value} ({type}).
  • templates.E003:<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>.

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

admin

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

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

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

ModelAdmin

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

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

InlineModelAdmin

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

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

GenericInlineModelAdmin

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

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

AdminSite

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

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

auth

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

contenttypes

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

  • contenttypes.E001: Объект ID GenericForeignKey ссылается на несуществующее поле <field>.
  • contenttypes.E002: Тип контента GenericForeignKey ссылается на несуществующее поле <field>.
  • contenttypes.E003: <field> не является ForeignKey.
  • contenttypes.E004: <field> не является ForeignKey для contenttypes.ContentType.
  • contenttypes.E005: Имена моделей должны содержать не более 100 символов.

postgres

Следующие проверки выполняются для полей моделей django.contrib.postgres:

  • postgres.E001: Базовое поле массива содержит ошибки: …
  • postgres.E002: Базовое поле массива не может быть связанным полем.
  • postgres.E003: Значение по умолчанию для <field> должно быть вызываемым объектом, а не экземпляром, чтобы оно не использовалось всеми экземплярами поля. Эта проверка была изменена на fields.E010 в Django 3.1.

sites

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

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

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

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

staticfiles

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

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

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

Spec-Zone.ru

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