Spec-Zone.ru › Django 4.2

Фреймворк проверки системы

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

Для получения подробной информации о том, как добавить собственные проверки и интегрировать их с проверками системы Django, см. Руководство по теме проверок системы.

API-справочник

CheckMessage

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

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

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

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

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

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

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

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

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

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

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

Асинхронная поддержка

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

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

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

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

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

Кэши

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

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

База данных

MySQL и MariaDB

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

  • mysql.E001: MySQL/MariaDB не допускает, чтобы у уникальных CharField был max_length > 255. Эта проверка была изменена на 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.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 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.W905: django.contrib.postgres.fields.CICharField устарел. Поддержка (за исключением исторических миграций) будет удалена в Django 5.1.
  • fields.W906: django.contrib.postgres.fields.CIEmailField устарел. Поддержка (за исключением исторических миграций) будет удалена в Django 5.1.
  • fields.W907: django.contrib.postgres.fields.CITextField устарел. Поддержка (за исключением исторических миграций) будет удалена в Django 5.1.

Поля файлов

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

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

  • fields.E300: Поле определяет отношение с моделью <model>, которая либо не установлена, либо является абстрактной.
  • fields.E301: Поле определяет отношение с моделью <app_label>.<model>, которая была заменена.
  • fields.E302: Обратный аксессор <related model>.<accessor name> для <app_label>.<model>.<field name> конфликтует с именем поля <app_label>.<model>.<field name>.
  • fields.E303: Обратное имя запроса для <app_label>.<model>.<field name> конфликтует с именем поля <app_label>.<model>.<field name>.
  • fields.E304: Обратный аксессор <related model>.<accessor name> для <app_label>.<model>.<field name> конфликтует с обратным аксессором для <app_label>.<model>.<field name>.
  • fields.E305: Обратное имя запроса для <app_label>.<model>.<field name> конфликтует с обратным именем запроса для <app_label>.<model>.<field name>.
  • fields.E306: Имя <name> является недопустимым related_name для поля <model>.<field name>.
  • fields.E307: Поле <app label>.<model>.<field name> было объявлено с отложенной ссылкой на <app label>.<model>, но приложение <app label> не установлено или не предоставляет модель <model>.
  • fields.E308: Обратное имя запроса <related query name> не должно заканчиваться на подчеркивание.
  • fields.E309: Обратное имя запроса <related query name> не должно содержать '__'.
  • fields.E310: Ни одно подмножество полей <field1>, <field2>, … в модели <model> не является уникальным.
  • fields.E311: <model>.<field name> должно быть уникальным, поскольку на него ссылается ForeignKey.
  • fields.E312: to_field <field name> не существует в связанной модели <app label>.<model>.
  • fields.E320: Поле указывает on_delete=SET_NULL, но не может быть NULL.
  • fields.E321: Поле указывает on_delete=SET_DEFAULT, но не имеет значения по умолчанию.
  • fields.E330: ManyToManyField не могут быть уникальными.
  • fields.E331: Поле указывает на отношение многие-ко-многим через модель <model>, которая не была установлена.
  • fields.E332: Поля многие-ко-многим с промежуточными таблицами не могут быть симметричными. Эта проверка появилась до Django 3.0.
  • fields.E333: Модель используется как промежуточная модель <model>, но она имеет более двух внешних ключей к <model>, что неоднозначно. Необходимо указать, какие два внешних ключа Django должен использовать, с помощью аргумента ключевого слова through_fields.
  • fields.E334: Модель используется как промежуточная модель <model>, но она имеет более одного внешнего ключа от <model>, что неоднозначно. Необходимо указать, какой внешний ключ Django должен использовать, с помощью аргумента ключевого слова through_fields.
  • fields.E335: Модель используется как промежуточная модель <model>, но она имеет более одного внешнего ключа к <model>, что неоднозначно. Необходимо указать, какой внешний ключ Django должен использовать, с помощью аргумента ключевого слова through_fields.
  • fields.E336: Модель используется как промежуточная модель <model>, но у неё нет внешнего ключа к <model> или <model>.
  • fields.E337: Поле указывает through_fields, но не предоставляет имена двух полей связи, которые должны использоваться для отношения через <model>.
  • fields.E338: Промежуточная модель <through model> не имеет поля <field name>.
  • fields.E339: <model>.<field name> не является внешним ключом к <model>.
  • fields.E340: Промежуточная таблица поля <table name> конфликтует с именем таблицы <model>/<model>.<field name>.
  • fields.W340: null не оказывает влияния на ManyToManyField.
  • fields.W341: ManyToManyField не поддерживает validators.
  • fields.W342: Установка unique=True на ForeignKey имеет тот же эффект, что и использование OneToOneField.
  • fields.W343: limit_choices_to не оказывает влияния на ManyToManyField с моделью through. Эта проверка появилась до Django 4.0.
  • fields.W344: Промежуточная таблица поля <table name> конфликтует с именем таблицы <model>/<model>.<field name>.
  • fields.W345: related_name не оказывает влияния на ManyToManyField при симметричном отношении, например, к «самому себе».
  • fields.W346: db_comment не оказывает влияния на ManyToManyField.

Модели

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

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

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

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

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

admin

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

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

  • admin.E001: Значение raw_id_fields должно быть списком или кортежем.
  • admin.E002: Значение raw_id_fields[n] ссылается на <field name>, что не является полем <model>.
  • admin.E003: Значение raw_id_fields[n] должно быть внешним ключом или полем many-to-many.
  • 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] должно быть полем many-to-many.
  • 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] должно быть внешним ключом или полем many-to-many.
  • 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: Идентификатор объекта 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>, так как это не внешний ключ или поле many-to-many.

Следующие проверки гарантируют, что 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.2/ref/checks/

Spec-Zone.ru

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