Система проверок фреймворка
Система проверок фреймворка — это набор статических проверок для валидации проектов Django. Она обнаруживает распространённые проблемы и предлагает подсказки по их исправлению. Фреймворк расширяем, поэтому вы можете легко добавлять свои собственные проверки.
Подробности о добавлении собственных проверок и их интеграции с системами проверок Django см. в руководстве по системам проверок.
Справочник API
CheckMessage
-
class CheckMessage(level, msg, hint=None, obj=None, id=None)[source]
Предупреждения и ошибки, поднимаемые системами проверок, должны быть экземплярами CheckMessage. Экземпляр описывает одну ошибку или предупреждение, подлежащее сообщению. Он также предоставляет контекст и подсказки, относящиеся к сообщению, а также уникальный идентификатор, используемый для фильтрации.
Аргументы конструктора:
-
level - Уровень серьёзности сообщения. Используйте одно из предопределённых значений:
DEBUG,INFO,WARNING,ERROR,CRITICAL. Если уровень равен или вышеERROR, Django запретит выполнение команд управления. Сообщения с уровнем нижеERROR(т.е. предупреждения) выводятся в консоль, но могут быть отключены. -
msg - Короткое (менее 80 символов) описание проблемы. Строка не должна содержать символы новой строки.
-
hint - Строка, содержащая подсказку по исправлению проблемы. Если подсказка не может быть предоставлена, или она очевидна из сообщения об ошибке, подсказку можно опустить или использовать значение
None. -
obj - Необязательно. Объект, предоставляющий контекст для сообщения (например, модель, где была обнаружена проблема). Объект должен быть моделью, полем, менеджером или любым другим объектом, который определяет метод
__str__(в Python 2 вам нужно определить метод__unicode__). Метод используется при сообщении всех сообщений, и его результат предшествует сообщению. -
id - Необязательная строка. Уникальный идентификатор проблемы. Идентификаторы должны следовать шаблону
applabel.X001, гдеX— одна из буквCEWID, указывающая на уровень серьёзности сообщения (Cдля критичных,Eдля ошибок). Число может быть назначено приложением, но должно быть уникальным в пределах этого приложения.
Существуют подклассы, которые упрощают создание сообщений с общими уровнями. При их использовании вы можете опустить аргумент level, так как он подразумевается именем класса.
-
class Debug(msg, hint=None, obj=None, id=None)[source]
-
class Info(msg, hint=None, obj=None, id=None)[source]
-
class Warning(msg, hint=None obj=None, id=None)[source]
-
class Error(msg, hint=None, obj=None, id=None)[source]
-
class Critical(msg, hint=None, obj=None, id=None)[source]
Встроенные проверки
Встроенные теги
Встроенные проверки Django организованы с использованием следующих тегов:
-
models: Проверки, управляющие определениями моделей, полей и менеджеров. -
signals: Проверки объявлений сигналов и регистрации обработчиков. -
admin: Проверки любых объявлений админского интерфейса. -
compatibility: Выявление потенциальных проблем с обновлением версий. -
security: Проверки конфигурации, связанных с безопасностью. -
templates: Проверки конфигурации, связанных с шаблонами. -
caches: Проверки конфигурации, связанных с кэшем. -
urls: Проверки конфигурации URL. -
database: Проверки проблем, связанных с базой данных. Проверки баз данных не выполняются по умолчанию, потому что они делают больше, чем статический анализ кода, как это делают обычные проверки. Они выполняются только командойmigrateили если вы укажете тегdatabaseпри вызове командыcheck.
Был добавлен тег database.
Некоторые проверки могут быть зарегистрированы с несколькими тегами.
Основные проверки
Модели
-
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>из модели<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:
index_together/unique_togetherссылается на несуществующее поле<field name>. -
models.E013:
index_together/unique_togetherссылается наManyToManyField<field name>, ноManyToManyFieldне поддерживаются для этого варианта. -
models.E014:
orderingдолжно быть кортежем или списком (даже если вы хотите упорядочить только по одному полю). -
models.E015:
orderingссылается на несуществующее поле<field name>. -
models.E016:
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>.
Поля
- 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.E100:
AutoFieldдолжны установить primary_key=True. -
fields.E110:
BooleanFieldне принимают пустые значения. -
fields.E120:
CharFieldдолжны определить атрибутmax_length. -
fields.E121:
max_lengthдолжно быть положительным целым числом. -
fields.W122:
max_lengthигнорируется при использовании сIntegerField. -
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не могут принимать пустые значения, если не допускаются NULL-значения, так как пустые значения хранятся как NULL. -
fields.E160: Опции
auto_now,auto_now_add, иdefaultвзаимно исключают друг друга. Должна быть только одна из этих опций. - fields.W161: Предоставлено исправленное значение по умолчанию.
-
fields.E900:
IPAddressFieldудален, за исключением поддержки в исторических миграциях. -
fields.W900:
IPAddressFieldустарел. Поддержка его (кроме исторических миграций) будет удалена в Django 1.9. *Эта проверка появилась в Django 1.7 и 1.8*. -
fields.W901:
CommaSeparatedIntegerFieldустарел. Поддержка его (кроме исторических миграций) будет удалена в Django 2.0.
Файловые поля
-
fields.E200:
unique— не является допустимым аргументом дляFileField. -
fields.E201:
primary_key— не является допустимым аргументом дляFileField. -
fields.E210: Нельзя использовать
ImageField, так как Pillow не установлен.
Связанные поля
Сигналы
-
signals.E001:
<handler>был подключен к сигналу<signal>с леничной ссылкой на отправителя<app label>.<model>, но приложение<app label>не установлено или не предоставляет модель<model>.
Обратная совместимость
Следующие проверки выполняются, чтобы предупредить пользователя о потенциальных проблемах, которые могут возникнуть в результате обновления версии.
- 1_6.W001: Некоторые модульные тесты проекта могут не выполняться так, как ожидается. Эта проверка была удалена в Django 1.8 из-за ложных срабатываний.
-
1_6.W002:
BooleanFieldне имеет значения по умолчанию. Эта проверка была удалена в Django 1.8 из-за ложных срабатываний. -
1_7.W001: В Django 1.7 глобальные значения по умолчанию для
MIDDLEWARE_CLASSES.django.contrib.auth.middleware.AuthenticationMiddleware,django.contrib.messages.middleware.MessageMiddlewareбыли удалены из значений по умолчанию. Если вашему проекту нужны эти промежуточные программные компоненты, необходимо настроить это значение. Эта проверка была удалена в Django 1.9. -
1_8.W001: Самостоятельные настройки
TEMPLATE_*устарели в Django 1.8, и словарьTEMPLATESимеет приоритет. Вы должны поместить значения следующих настроек в словарь defaultsTEMPLATES:TEMPLATE_DIRS,TEMPLATE_CONTEXT_PROCESSORS,TEMPLATE_DEBUG,TEMPLATE_LOADERS,TEMPLATE_STRING_IF_INVALID. -
1_10.W001: Настройка
MIDDLEWARE_CLASSESустарела в Django 1.10, и настройкаMIDDLEWAREимеет приоритет. Поскольку вы установилиMIDDLEWARE, значениеMIDDLEWARE_CLASSESигнорируется.
Администрирование
Проверки администрирования выполняются в рамках тега 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_vertical[n]ссылается на<field name>, что не является атрибутом<model>. -
admin.E020: Значение
filter_vertical[n]/filter_vertical[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или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>.
ModelAdmin
Следующие проверки выполняются для любой регистрации ModelAdmin в админ-панели:
-
admin.E101: Значение
save_asдолжно быть булевым. -
admin.E102: Значение
save_on_topдолжно быть булевым. -
admin.E103: Значение
inlinesдолжно быть списком или кортежем. -
admin.E104:
<InlineModelAdmin class>должен наследоваться отBaseModelAdmin. -
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>, которое не является атрибутом<model>. -
admin.E128: Значение
date_hierarchyдолжно бытьDateFieldилиDateTimeField.
InlineModelAdmin
Следующие проверки выполняются для любой InlineModelAdmin, зарегистрированной как встраиваемая в ModelAdmin.
-
admin.E201: Нельзя исключить поле
<field name>, так как оно является внешним ключом к родительской модели<app_label>.<model>. -
admin.E202:
<model>не имеетForeignKeyк<parent model>./<model>имеет более одногоForeignKeyк<parent model>. -
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должен быть в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должно быть атрибутом или свойством, а не методом. Игнорирование этого — проблема безопасности, так как анонимные пользователи будут считаться авторизованными!
Типы контента
Следующие проверки выполняются, когда модель содержит GenericForeignKey или GenericRelation:
-
contenttypes.E001: Идентификатор объекта
GenericForeignKeyссылается на несуществующее поле<field>. -
contenttypes.E002: Тип контента
GenericForeignKeyссылается на несуществующее поле<field>. -
contenttypes.E003:
<field>не являетсяForeignKey. -
contenttypes.E004:
<field>не являетсяForeignKeyкcontenttypes.ContentType.
Безопасность
Проверки безопасности не делают ваш сайт безопасным. Они не проверяют код, не выполняют обнаружение вторжений и не делают ничего особенно сложного. Скорее, они помогают выполнить автоматизированный, простой список проверок. Они помогают вам помнить о простых вещах, которые улучшают безопасность вашего сайта.
Некоторые из этих проверок могут быть неподходящими для вашей конкретной конфигурации развертывания. Например, если вы перенаправляете HTTP в HTTPS в балансировщике нагрузки, вам будет раздражать постоянное предупреждение о том, что вы не включили SECURE_SSL_REDIRECT. Используйте SILENCED_SYSTEM_CHECKS, чтобы отключить ненужные проверки.
Следующие проверки выполняются, если вы используете опцию check --deploy:
-
security.W001: У вас нет
django.middleware.security.SecurityMiddlewareв вашемMIDDLEWARE/MIDDLEWARE_CLASSES, поэтому настройкиSECURE_HSTS_SECONDS,SECURE_CONTENT_TYPE_NOSNIFF,SECURE_BROWSER_XSS_FILTERиSECURE_SSL_REDIRECTне будут иметь эффекта. -
security.W002: У вас нет
django.middleware.clickjacking.XFrameOptionsMiddlewareв вашемMIDDLEWARE/MIDDLEWARE_CLASSES, поэтому ваши страницы не будут передаваться с заголовком'x-frame-options'. Если для вашего сайта нет веских причин для передачи в фрейме, вы должны рассмотреть возможность включения этого заголовка для предотвращения атак clickjacking. -
security.W003: Похоже, вы не используете встроенную защиту от поддельных межсайтовых запросов Django через middleware (
django.middleware.csrf.CsrfViewMiddlewareотсутствует в вашемMIDDLEWARE/MIDDLEWARE_CLASSES). Включение 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. -
security.W008: Настройка
SECURE_SSL_REDIRECTне установлена вTrue. Если ваш сайт должен быть доступен как по SSL, так и по обычным соединениям, вы можете установить это значение вTrueили настроить балансировщик нагрузки или прокси-сервер для перенаправления всех соединений на HTTPS. -
security.W009: Настройка
SECRET_KEYсодержит меньше 50 символов или меньше 5 уникальных символов. Пожалуйста, сгенерируйте длинный и случайныйSECRET_KEY, в противном случае многие критически важные для безопасности функции Django будут уязвимы к атакам. -
security.W010: У вас есть
django.contrib.sessionsв вашемINSTALLED_APPS, но вы не установилиSESSION_COOKIE_SECUREвTrue. Использование защищенного только для HTTPS cookie сессии затрудняет перехват сессий пользователей сетевыми шпионами. -
security.W011: У вас есть
django.contrib.sessions.middleware.SessionMiddlewareв вашемMIDDLEWARE/MIDDLEWARE_CLASSES, но вы не установилиSESSION_COOKIE_SECUREвTrue. Использование защищенного только для HTTPS cookie сессии затрудняет перехват сессий пользователей сетевыми шпионами. -
security.W012:
SESSION_COOKIE_SECUREне установлено вTrue. Использование защищенного только для HTTPS cookie сессии затрудняет перехват сессий пользователей сетевыми шпионами. -
security.W013: У вас есть
django.contrib.sessionsв вашемINSTALLED_APPS, но вы не установилиSESSION_COOKIE_HTTPONLYвTrue. Использование cookie сессии только для HTTP затрудняет перехват сессий пользователей атаками XSS. -
security.W014: У вас есть
django.contrib.sessions.middleware.SessionMiddlewareв вашемMIDDLEWARE/MIDDLEWARE_CLASSES, но вы не установилиSESSION_COOKIE_HTTPONLYвTrue. Использование cookie сессии только для HTTP затрудняет перехват сессий пользователей атаками XSS. -
security.W015:
SESSION_COOKIE_HTTPONLYне установлено вTrue. Использование cookie сессии только для HTTP затрудняет перехват сессий пользователей атаками XSS. -
security.W016:
CSRF_COOKIE_SECUREне установлено вTrue. Использование защищенного только для HTTPS cookie CSRF затрудняет перехват токена CSRF сетевыми шпионами. -
security.W017:
CSRF_COOKIE_HTTPONLYне установлено вTrue. Использование cookie CSRF только для HTTP затрудняет перехват токена CSRF атаками XSS. -
security.W018: Вы не должны иметь
DEBUGустановленным вTrueпри развертывании. -
security.W019: У вас есть
django.middleware.clickjacking.XFrameOptionsMiddlewareв вашемMIDDLEWARE/MIDDLEWARE_CLASSES, ноX_FRAME_OPTIONSне установлено в'DENY'. По умолчанию это'SAMEORIGIN', но если нет веских причин для отображения других частей сайта в фрейме, вы должны изменить его на'DENY'. -
security.W020:
ALLOWED_HOSTSне должно быть пустым при развертывании.
Домены
Следующие проверки выполняются для любой модели, использующей CurrentSiteManager:
-
sites.E001:
CurrentSiteManagerне удалось найти поле с именем<field name>. -
sites.E002:
CurrentSiteManagerне может использовать<field>, так как это не поле foreign key или many-to-many.
База данных
MySQL
Если вы используете MySQL, будут выполнены следующие проверки:
-
mysql.E001: MySQL не допускает уникальных
CharFieldсmax_length> 255. - mysql.W002: MySQL Strict Mode не установлен для подключения к базе данных ‘<alias>’. См. также Установка sql_mode.
Шаблоны
Следующие проверки проверяют, правильно ли настроена настройка TEMPLATES:
-
templates.E001: У вас есть
'APP_DIRS': Trueв вашемTEMPLATES, но также указано'loaders'вOPTIONS. УдалитеAPP_DIRSили удалите опцию'loaders'. -
templates.E002:
string_if_invalidвTEMPLATESOPTIONSдолжно быть строкой, но получено:{value}({type}).
Кэши
Следующие проверки проверяют, правильно ли настроена настройка CACHES:
-
caches.E001: Вы должны определить кэш
'default'в настройкеCACHES.
URL
Ниже приведены проверки, выполняемые для вашей конфигурации URL:
-
urls.W001: Ваш шаблон URL
<pattern>используетinclude()с префиксомregex, заканчивающимся на$. Удалите символ доллара изregex, чтобы избежать проблем с включением URL. -
urls.W002: Ваш шаблон URL
<pattern>содержит префиксregex, начинающийся со слэша/. Удалите этот слэш, так как он излишний. Если этот шаблон используется вinclude(), убедитесь, что шаблон вinclude()имеет конечный/. -
urls.W003: Ваш шаблон URL
<pattern>содержит префиксnameс двоеточием:. Удалите двоеточие, чтобы избежать неоднозначных ссылок на пространство имён. -
urls.E004: Ваш шаблон URL
<pattern>некорректен. Убедитесь, чтоurlpatternsявляется списком экземпляровurl().
© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/1.10/ref/checks/