Система проверок фреймворка
Система проверок фреймворка — это набор статических проверок для валидации проектов 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)
Встроенные теги
-
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. Эта проверка была изменена в Django 3.1, так как реальный максимальный размер зависит от многих факторов. -
mysql.W002: Строгий режим MySQL/MariaDB не установлен для подключения к базе данных
<alias>. См. также Установка sql_mode. -
mysql.W003: MySQL/MariaDB может не разрешить уникальные
CharFieldсmax_length> 255.
Управление файлами
Следующие проверки проверяют вашу настройку для Управление файлами:
-
files.E001: Настройка
FILE_UPLOAD_TEMP_DIRссылается на несуществующую директорию<path>.
Поля модели
- fields.E001: Имена полей не должны оканчиваться на символ подчёркивания.
-
fields.E002: Имена полей не должны содержать
"__". -
fields.E003:
pk— зарезервированное слово, которое нельзя использовать в качестве имени поля. -
fields.E004:
choicesдолжно быть отображением (например, словарем) или итерируемым объектом (например, списком или кортежем). -
fields.E005:
choicesдолжно быть отображением фактических значений на удобочитаемые имена или итерируемым объектом, содержащим кортежи(actual value, human readable name). -
fields.E006:
db_indexдолжно бытьNone,TrueилиFalse. -
fields.E007: Первичные ключи не должны содержать
null=True. -
fields.E008: Все
validatorsдолжны быть вызываемыми. -
fields.E009:
max_lengthслишком мало, чтобы вместить самое длинное значение вchoices(<count>символов). -
fields.E010: Значение по умолчанию
<field>должно быть вызываемым объектом, а не экземпляром, чтобы оно не делилось между всеми экземплярами поля. -
fields.E011:
<database>не поддерживает значения по умолчанию базы данных с выражениями (db_default). -
fields.E012:
<expression>нельзя использовать вdb_default. -
fields.E100:
AutoFieldдолжны устанавливать primary_key=True. -
fields.E110:
BooleanFieldне принимают нулевые значения. Эта проверка появилась до поддержки нулевых значений в Django 2.1. -
fields.E120:
CharFieldдолжны определять атрибутmax_length. -
fields.E121:
max_lengthдолжно быть положительным целым числом. -
fields.W122:
max_lengthигнорируется при использовании с<integer field type>. -
fields.E130:
DecimalFieldдолжны определять атрибутdecimal_places. -
fields.E131:
decimal_placesдолжно быть неотрицательным целым числом. -
fields.E132:
DecimalFieldдолжны определять атрибутmax_digits. -
fields.E133:
max_digitsдолжно быть положительным целым числом. -
fields.E134:
max_digitsдолжно быть больше или равноdecimal_places. -
fields.E140:
FilePathFieldдолжны иметь либоallow_files, либоallow_foldersустановленным в значение True. -
fields.E150:
GenericIPAddressFieldне могут иметьblank=True, еслиnull=False, так как пустые значения хранятся как 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’sdefaultне может быть строкой. Используйте байтовый контент вместо этого. -
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. -
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 не установлен.
Связанные поля
Модели
-
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). -
models.W047:
<database>не поддерживает уникальные ограничения с разными значениями NULL.
Безопасность
Проверки безопасности не обеспечивают безопасность вашего сайта. Они не проверяют код, не выполняют обнаружение вторжений и не выполняют каких-либо особенно сложных задач. Вместо этого они помогают выполнить автоматическую проверку на наличие простых ошибок, которые помогут улучшить безопасность вашего сайта.
Некоторые из этих проверок могут быть неподходящими для вашей конкретной конфигурации развертывания. Например, если вы выполняете перенаправление HTTP в HTTPS в балансировщике нагрузки, будет раздражать постоянное предупреждение о том, что вы не включили SECURE_SSL_REDIRECT. Используйте SILENCED_SYSTEM_CHECKS, чтобы отключить ненужные проверки.
Следующие проверки выполняются, если вы используете опцию check --deploy:
-
security.W001: У вас нет
django.middleware.security.SecurityMiddlewareв вашемMIDDLEWARE, поэтому настройкиSECURE_HSTS_SECONDS,SECURE_CONTENT_TYPE_NOSNIFF,SECURE_REFERRER_POLICY,SECURE_CROSS_ORIGIN_OPENER_POLICYиSECURE_SSL_REDIRECTне будут иметь эффекта. -
security.W002: У вас нет
django.middleware.clickjacking.XFrameOptionsMiddlewareв вашемMIDDLEWARE, поэтому ваши страницы не будут передаваться с заголовком'x-frame-options'. Если для вашего сайта нет веской причины передаваться в фрейме, рекомендуется включить этот заголовок для предотвращения атак кликджекинга. -
security.W003: Похоже, вы не используете встроенную защиту от межсайтовых запросов с подделкой (CSRF) Django посредством middleware (
django.middleware.csrf.CsrfViewMiddlewareне включён в вашMIDDLEWARE). Включение middleware — это самый безопасный подход, чтобы избежать уязвимостей. -
security.W004: Вы не задали значение для настройки
SECURE_HSTS_SECONDS. Если ваш сайт обслуживается только через SSL, можно установить значение и включить HTTP Strict Transport Security. Сначала обязательно прочтите документацию; неосторожное включение HSTS может привести к серьёзным и необратимым проблемам. -
security.W005: Вы не задали настройку
SECURE_HSTS_INCLUDE_SUBDOMAINSв значениеTrue. Без этого ваш сайт потенциально уязвим к атакам через небезопасное соединение с поддоменом. Установите это значение вTrueтолько если уверены, что все поддомены вашего домена должны обслуживаться исключительно через SSL. -
security.W006: Настройка
SECURE_CONTENT_TYPE_NOSNIFFне установлена в значениеTrue, поэтому ваши страницы не будут передаваться с заголовком'X-Content-Type-Options: nosniff'. Рекомендуется включить этот заголовок, чтобы предотвратить неправильную идентификацию типов контента браузером. -
security.W007: Настройка
SECURE_BROWSER_XSS_FILTERне установлена в значениеTrue, поэтому ваши страницы не будут передаваться с заголовком'X-XSS-Protection: 1; mode=block'. Рекомендуется включить этот заголовок для активации фильтрации XSS браузером и предотвращения атак XSS. *Эта проверка удалена в Django 3.0, так как заголовок*X-XSS-Protection*больше не поддерживается современными браузерами.* -
security.W008: Настройка
SECURE_SSL_REDIRECTне установлена в значениеTrue. Если ваш сайт должен быть доступен как по SSL, так и по обычным соединениям, следует установить это значение вTrueили настроить балансировщик нагрузки или обратный прокси-сервер для перенаправления всех соединений на HTTPS. -
security.W009: У вашей настройки
SECRET_KEYменьше 50 символов, меньше 5 уникальных символов или она начинается с'django-insecure-', что указывает на автоматическое создание Django. Пожалуйста, сгенерируйте длинное и случайное значение, иначе многие критически важные для безопасности функции Django будут уязвимы к атакам. -
security.W010: У вас есть
django.contrib.sessionsв вашемINSTALLED_APPS, но вы не задали значениеSESSION_COOKIE_SECUREвTrue. Использование безопасного cookie-файла сессии затрудняет перехват сессий пользователей средствами анализа сетевого трафика. -
security.W011: У вас есть
django.contrib.sessions.middleware.SessionMiddlewareв вашемMIDDLEWARE, но вы не задали значениеSESSION_COOKIE_SECUREвTrue. Использование безопасного cookie-файла сессии затрудняет перехват сессий пользователей средствами анализа сетевого трафика. -
security.W012: Настройка
SESSION_COOKIE_SECUREне установлена вTrue. Использование безопасного cookie-файла сессии затрудняет перехват сессий пользователей средствами анализа сетевого трафика. -
security.W013: У вас есть
django.contrib.sessionsв вашемINSTALLED_APPS, но вы не задали значениеSESSION_COOKIE_HTTPONLYвTrue. Использование безопасного cookie-файла сессии затрудняет перехват сессий пользователя при атаках 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 не принимает правильное количество аргументов.
- security.E102: Предварительный просмотр CSRF не может быть импортирован.
Сигналы
-
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в параметреTEMPLATESOPTIONSдолжен быть строкой, но получено:{value}({type}). -
templates.E003:
<name>используется для нескольких модулей тегов шаблонов:<module list>. Эта проверка была изменена наtemplates.W003в Django 4.1.2. -
templates.W003:
<name>используется для нескольких модулей тегов шаблонов:<module list>.
Перевод
Следующие проверки выполняются для вашей конфигурации перевода:
-
translation.E001: Вы предоставили недопустимое значение для параметра
LANGUAGE_CODE:<value>. -
translation.E002: Вы предоставили недопустимый код языка в параметре
LANGUAGES:<value>. -
translation.E003: Вы предоставили недопустимый код языка в параметре
LANGUAGES_BIDI:<value>. -
translation.E004: Вы предоставили значение для параметра
LANGUAGE_CODE, которого нет в параметреLANGUAGES.
URL-адреса
Следующие проверки выполняются для вашей конфигурации URL-адресов:
-
urls.W001: Ваш шаблон URL-адреса
<pattern>используетinclude()сroute, оканчивающимся на$. Удалите символ доллара изrouteдля избежания проблем при включении URL-адресов. -
urls.W002: Ваш шаблон URL-адреса
<pattern>содержитroute, начинающийся со слэша/. Удалите этот слэш, так как он не нужен. Если этот шаблон предназначен дляinclude(), убедитесь, что шаблонinclude()имеет заключительный/. -
urls.W003: Ваш шаблон URL-адреса
<pattern>содержитname, включающий двоеточие:. Удалите двоеточие для избежания неоднозначных ссылок на пространства имен. -
urls.E004: Ваш шаблон URL-адреса
<pattern>неверный. Убедитесь, чтоurlpatterns— это список экземпляровpath()и/илиre_path(). -
urls.W005: Пространство имен URL
<namespace>не уникально. Возможно, не удастся обработать все URL-адреса в этом пространстве имён. -
urls.E006: Параметр
MEDIA_URL/STATIC_URLдолжен заканчиваться слэшем. -
urls.E007: Пользовательская функция просмотра
handlerXXX'path.to.view'не принимает необходимое количество аргументов (…). -
urls.E008: Пользовательская функция просмотра
handlerXXX'path.to.view'не удалось импортировать. -
urls.E009: Ваш шаблон URL-адреса
<pattern>имеет неверную функцию просмотра, передайте<view>.as_view()вместо<view>. -
urls.W010: Ваш шаблон URL-адреса
<pattern>содержит несовпадающий<angle bracket>.
contrib проверки приложений
admin
Все проверки администратора выполняются в рамках тега admin.
Следующие проверки выполняются для любого ModelAdmin (или подкласса), зарегистрированного в администраторской панели:
-
admin.E001: Значение
raw_id_fieldsдолжно быть списком или кортежем. -
admin.E002: Значение
raw_id_fields[n]относится к<field name>, что не является полем<model>. -
admin.E003: Значение
raw_id_fields[n]должно быть внешним ключом или полем «многие ко многим». -
admin.E004: Значение
fieldsдолжно быть списком или кортежем. -
admin.E005: Оба
fieldsetsиfieldsуказаны. -
admin.E006: Значение
fieldsсодержит повторяющиеся поля. -
admin.E007: Значение
fieldsetsдолжно быть списком или кортежем. -
admin.E008: Значение
fieldsets[n]должно быть списком или кортежем. -
admin.E009: Значение
fieldsets[n]должно иметь длину 2. -
admin.E010: Значение
fieldsets[n][1]должно быть словарем. -
admin.E011: Значение
fieldsets[n][1]должно содержать ключfields. -
admin.E012: В
fieldsets[n][1]есть повторяющиеся поля. -
admin.E013: Значение
fields[n]/filter_horizontal[n]/filter_vertical[n]/fieldsets[n][m]не может включатьManyToManyField<field name>, потому что это поле вручную задает модель отношений. -
admin.E014: Значение
excludeдолжно быть списком или кортежем. -
admin.E015: Значение
excludeсодержит повторяющиеся поля. -
admin.E016: Значение
formдолжно наследоваться отBaseModelForm. -
admin.E017: Значение
filter_verticalдолжно быть списком или кортежем. -
admin.E018: Значение
filter_horizontalдолжно быть списком или кортежем. -
admin.E019: Значение
filter_vertical[n]/filter_horizontal[n]относится к<field name>, что не является полем<model>. -
admin.E020: Значение
filter_vertical[n]/filter_horizontal[n]должно быть полем «многие ко многим». -
admin.E021: Значение
radio_fieldsдолжно быть словарем. -
admin.E022: Значение
radio_fieldsотносится к<field name>, что не является полем<model>. -
admin.E023: Значение
radio_fieldsотносится к<field name>, что не является экземпляромForeignKey, и не имеет определенияchoices. -
admin.E024: Значение
radio_fields[<field name>]должно быть либоadmin.HORIZONTAL, либоadmin.VERTICAL. -
admin.E025: Значение
view_on_siteдолжно быть вызываемым или булевым значением. -
admin.E026: Значение
prepopulated_fieldsдолжно быть словарем. -
admin.E027: Значение
prepopulated_fieldsотносится к<field name>, что не является полем<model>. -
admin.E028: Значение
prepopulated_fieldsотносится к<field name>, что не должно быть полемDateTimeField,ForeignKey,OneToOneField, илиManyToManyField. -
admin.E029: Значение
prepopulated_fields[<field name>]должно быть списком или кортежем. -
admin.E030: Значение
prepopulated_fieldsотносится к<field name>, что не является полем<model>. -
admin.E031: Значение
orderingдолжно быть списком или кортежем. -
admin.E032: Значение
orderingимеет маркер случайного порядка?, но также содержит и другие поля. -
admin.E033: Значение
orderingотносится к<field name>, что не является полем<model>. -
admin.E034: Значение
readonly_fieldsдолжно быть списком или кортежем. -
admin.E035: Значение
readonly_fields[n]относится к<field_name>, что не является вызываемым, атрибутом<ModelAdmin class>, или атрибутом<model>. -
admin.E036: Значение
autocomplete_fieldsдолжно быть списком или кортежем. -
admin.E037: Значение
autocomplete_fields[n]относится к<field name>, что не является полем<model>. -
admin.E038: Значение
autocomplete_fields[n]должно быть внешним ключом или полем «многие ко многим». -
admin.E039: Администратор для модели
<model>должен быть зарегистрирован для использования в<modeladmin>.autocomplete_fields. -
admin.E040:
<modeladmin>должен определятьsearch_fields, так как оно используется в<other_modeladmin>.autocomplete_fields.
ModelAdmin
Следующие проверки выполняются для любого ModelAdmin, зарегистрированного в администраторской панели:
-
admin.E101: Значение
save_asдолжно быть булевым. -
admin.E102: Значение
save_on_topдолжно быть булевым. -
admin.E103: Значение
inlinesдолжно быть списком или кортежем. -
admin.E104:
<InlineModelAdmin class>должен наследоваться отInlineModelAdmin. -
admin.E105:
<InlineModelAdmin class>должен иметь атрибутmodel. -
admin.E106: Значение
<InlineModelAdmin class>.modelдолжно бытьModel. -
admin.E107: Значение
list_displayдолжно быть списком или кортежем. -
admin.E108: Значение
list_display[n]ссылается на<label>, которое не является вызываемым, атрибутом<ModelAdmin class>, или атрибутом или методом<model>. -
admin.E109: Значение
list_display[n]не должно быть полем "многие ко многим" или обратной внешней связью. -
admin.E110: Значение
list_display_linksдолжно быть списком, кортежем илиNone. -
admin.E111: Значение
list_display_links[n]ссылается на<label>, которое не определено вlist_display. -
admin.E112: Значение
list_filterдолжно быть списком или кортежем. -
admin.E113: Значение
list_filter[n]должно наследоваться отListFilter. -
admin.E114: Значение
list_filter[n]не должно наследоваться отFieldListFilter. -
admin.E115: Значение
list_filter[n][1]должно наследоваться отFieldListFilter. -
admin.E116: Значение
list_filter[n]ссылается на<label>, которое не ссылается на поле. -
admin.E117: Значение
list_select_relatedдолжно быть булевым значением, кортежем или списком. -
admin.E118: Значение
list_per_pageдолжно быть целым числом. -
admin.E119: Значение
list_max_show_allдолжно быть целым числом. -
admin.E120: Значение
list_editableдолжно быть списком или кортежем. -
admin.E121: Значение
list_editable[n]ссылается на<label>, которое не является полем<model>. -
admin.E122: Значение
list_editable[n]ссылается на<label>, которое не содержится вlist_display. -
admin.E123: Значение
list_editable[n]не может находиться как вlist_editableтак и вlist_display_links. -
admin.E124: Значение
list_editable[n]ссылается на первое поле вlist_display(<label>), которое нельзя использовать, еслиlist_display_linksне задано. -
admin.E125: Значение
list_editable[n]ссылается на<field name>, которое не редактируется через админку. -
admin.E126: Значение
search_fieldsдолжно быть списком или кортежем. -
admin.E127: Значение
date_hierarchyссылается на<field name>, которое не ссылается на поле. -
admin.E128: Значение
date_hierarchyдолжно бытьDateFieldилиDateTimeField. -
admin.E129:
<modeladmin>должен определять методhas_<foo>_permission()для действия<action>. -
admin.E130: Атрибуты
__name__действий, определённых в<modeladmin>должны быть уникальными. Имя<name>не уникально.
InlineModelAdmin
Следующие проверки выполняются для любого InlineModelAdmin, зарегистрированного как вложенный на ModelAdmin.
-
admin.E201: Нельзя исключить поле
<field name>, так как это внешняя ссылка на родительскую модель<app_label>.<model>. -
admin.E202:
<model>не имеетForeignKeyна<parent model>./<model>имеет более однойForeignKeyна<parent model>. Необходимо указать атрибутfk_name. -
admin.E203: Значение
extraдолжно быть целым числом. -
admin.E204: Значение
max_numдолжно быть целым числом. -
admin.E205: Значение
min_numдолжно быть целым числом. -
admin.E206: Значение
formsetдолжно наследоваться отBaseModelFormSet.
GenericInlineModelAdmin
Следующие проверки выполняются для любого GenericInlineModelAdmin, зарегистрированного как вложенный на ModelAdmin.
-
admin.E301:
'ct_field'ссылается на<label>, которое не является полем в<model>. -
admin.E302:
'ct_fk_field'ссылается на<label>, которое не является полем в<model>. -
admin.E303:
<model>не имеетGenericForeignKey. -
admin.E304:
<model>не имеетGenericForeignKeyиспользуя поле типа содержимого<field name>и поле идентификатора объекта<field name>.
AdminSite
Следующие проверки выполняются для стандартного AdminSite:
-
admin.E401:
django.contrib.contenttypesдолжен быть вINSTALLED_APPSдля использования приложения администрирования. -
admin.E402:
django.contrib.auth.context_processors.authдолжен быть включён вDjangoTemplates(TEMPLATES), если используется стандартный бэкенд авторизации, для использования приложения администрирования. -
admin.E403: Экземпляр
django.template.backends.django.DjangoTemplatesдолжен быть сконфигурирован вTEMPLATESдля использования приложения администрирования. -
admin.E404:
django.contrib.messages.context_processors.messagesдолжен быть включён вDjangoTemplates(TEMPLATES) для использования приложения администрирования. -
admin.E405:
django.contrib.authдолжен быть вINSTALLED_APPSдля использования приложения администрирования. -
admin.E406:
django.contrib.messagesдолжен быть вINSTALLED_APPSдля использования приложения администрирования. -
admin.E408:
django.contrib.auth.middleware.AuthenticationMiddlewareдолжен быть вMIDDLEWAREдля использования приложения администрирования. -
admin.E409:
django.contrib.messages.middleware.MessageMiddlewareдолжен быть вMIDDLEWAREдля использования приложения администрирования. -
admin.E410:
django.contrib.sessions.middleware.SessionMiddlewareдолжен быть вMIDDLEWAREдля использования приложения администрирования. -
admin.W411:
django.template.context_processors.requestдолжен быть включён вDjangoTemplates(TEMPLATES) для использования боковой панели навигации администрирования.
auth
-
auth.E001:
REQUIRED_FIELDSдолжен быть списком или кортежем. -
auth.E002: Поле с именем
USERNAME_FIELDдля пользовательской модели не должно быть включено вREQUIRED_FIELDS. -
auth.E003:
<field>должен быть уникальным, поскольку он названUSERNAME_FIELD. -
auth.W004:
<field>названоUSERNAME_FIELD, но не является уникальным. -
auth.E005: Имя разрешения
<codename>совпадает со встроенным разрешением для модели<model>. -
auth.E006: Разрешение с именем
<codename>дублируется для модели<model>. -
auth.E007:
verbose_nameмодели<model>должно содержать не более 244 символов, чтобы имена встроенных разрешений не превышали 255 символов. -
auth.E008: Разрешение с именем
<name>модели<model>превышает 255 символов. -
auth.C009:
<User model>.is_anonymousдолжно быть атрибутом или свойством, а не методом. Игнорирование этого является проблемой безопасности, так как анонимные пользователи будут рассматриваться как авторизованные! -
auth.C010:
<User model>.is_authenticatedдолжно быть атрибутом или свойством, а не методом. Игнорирование этого является проблемой безопасности, так как анонимные пользователи будут рассматриваться как авторизованные! -
auth.E011: Имя модели
<model>должно содержать не более 93 символов, чтобы имена встроенных разрешений не превышали 100 символов. -
auth.E012: Разрешение с именем
<codename>модели<model>превышает 100 символов.
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>должно быть вызываемым объектом, а не экземпляром, чтобы оно не делилось между всеми экземплярами полей. В Django 3.1 эта проверка была изменена наfields.E010. - postgres.W004: Базовое поле для массива имеет предупреждения: …
sites
Для моделей, использующих CurrentSiteManager, выполняются следующие проверки:
-
sites.E001:
CurrentSiteManagerне смог найти поле с именем<field name>. -
sites.E002:
CurrentSiteManagerне может использовать<field>, так как это не поле внешнего ключа или связи «многие ко многим».
Следующие проверки гарантируют правильную конфигурацию django.contrib.sites:
-
sites.E101: Настройка
SITE_IDдолжна быть целым числом.
staticfiles
Следующие проверки гарантируют правильную конфигурацию django.contrib.staticfiles:
-
staticfiles.E001: Настройка
STATICFILES_DIRSне является кортежем или списком. -
staticfiles.E002: Настройка
STATICFILES_DIRSне должна содержать настройкуSTATIC_ROOT. -
staticfiles.E003: Префикс
<prefix>в настройкеSTATICFILES_DIRSне должен заканчиваться слешем. -
staticfiles.W004: Директория
<directory>в настройкеSTATICFILES_DIRSне существует. -
staticfiles.E005: Настройка
STORAGESдолжна определять хранилищеstaticfiles.
© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/5.0/ref/checks/