Spec-Zone.ru › Django 1.10

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

Система проверок фреймворка — это набор статических проверок для валидации проектов 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.
Добавлено в Django 1.10:

Был добавлен тег 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 не установлен.

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

  • fields.E300: Поле определяет отношение с моделью <model>, которая либо не установлена, либо является абстрактной.
  • fields.E301: Поле определяет отношение с моделью <model>, которая была заменена.
  • fields.E302: Доступ к полю <field name> конфликтует с полем <field name>.
  • fields.E303: Имя обратного запроса для поля <field name> конфликтует с полем <field name>.
  • fields.E304: Имя поля <field name> конфликтует с доступом к <field name>.
  • fields.E305: Имя поля <field name> конфликтует с именем обратного запроса для <field name>.
  • fields.E306: Имя связанного объекта должно быть корректным идентификатором Python или заканчиваться на '+'.
  • fields.E307: Поле <app label>.<model>.<field name> было объявлено с леничной ссылкой на <app label>.<model>, но приложение <app label> не установлено или не предоставляет модель <model>.
  • fields.E310: Ни один набор полей <field1>, <field2>, … модели <model> не является уникальным. Добавьте unique=True к любому из этих полей или добавьте хотя бы подмножество этих полей в ограничение unique_together.
  • fields.E311: <model> должен установить unique=True, так как на него ссылается ForeignKey.
  • fields.E320: Поле указывает на on_delete=SET_NULL, но не может быть пустым.
  • fields.E321: Поле указывает на on_delete=SET_DEFAULT, но не имеет значения по умолчанию.
  • fields.E330: ManyToManyField не могут быть уникальными.
  • fields.E331: Поле указывает на много-к-много отношение через модель <model>, которая не установлена.
  • fields.E332: Поля «много-к-много» со вспомогательными таблицами не должны быть симметричными.
  • 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.W340: null не оказывает влияния на ManyToManyField.
  • fields.W341: ManyToManyField не поддерживает validators.
  • fields.W342: Установка unique=True на ForeignKey имеет тот же эффект, что и использование OneToOneField.

Сигналы

  • 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 имеет приоритет. Вы должны поместить значения следующих настроек в словарь defaults TEMPLATES: 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:

END_OF_DOCUMENT_MARKER
  • 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 в TEMPLATES OPTIONS должно быть строкой, но получено: {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/

Spec-Zone.ru

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