Примечания к выпуску Django 1.8.2

Май 20, 2015

Django 1.8.2 исправляет проблему безопасности и несколько ошибок в 1.8.1.

Исправлена очистка сессии в бэкенде cached_db

Изменение на session.flush() в бэкенде сессий cached_db в Django 1.8 ошибочно устанавливает ключ сессии в пустую строку, а не None. Пустая строка рассматривается как правильный ключ сессии, и сессионный файл cookie устанавливается соответствующим образом. Все пользователи с пустой строкой в куки сеанса будут использовать одно и то же хранилище сеанса. session.flush() вызывается django.contrib.auth.logout() и, что более серьезно, django.contrib.auth.login(), когда пользователь переключает учетную запись. Если пользователь вошел в систему и снова вошел в систему под другой учетной записью (не выходя из системы), сессия стирается, чтобы избежать повторного использования. После того, как сессия смывается (и ее сессионный ключ становится ''), данные учетной записи устанавливаются на сессии, и сессия сохраняется. Все пользователи с пустой строкой в куки сессии теперь будут входить в эту учетную запись.

Исправления

  • Исправлена проверка уникальности псевдонимов шаблонизатора (#24685).
  • Исправлена ошибка при повторном использовании одного и того же экземпляра Case в запросе (#24752).
  • Исправлено продвижение join для выражений Case. Например, аннотирование запроса выражением Case могло неожиданно отфильтровать результаты (#24766).
  • Исправлены отрицаемые объекты Q в выражениях. Случаи типа Case(When(~Q(friends__age__lte=30))) пытались сгенерировать подзапрос, что приводило к сбою (#24705).
  • Исправлено неправильное формирование предложения GROUP BY в MySQL, когда модель запроса имеет самореферентный внешний ключ (#24748).
  • Реализовано ForeignKey.get_db_prep_value() так, что ForeignKeys, указывающие на UUIDField и наследование на моделях с UUIDField первичными ключами работают правильно (#24698, #24712).
  • Исправлен поиск isnull для HStoreField (#24751).
  • Исправлена ошибка MySQL, когда при миграции удаляется комбинированный индекс (unique_together или index_together), содержащий внешний ключ (#24757).
  • Исправлено удаление куки сессии при использовании SESSION_COOKIE_DOMAIN (#24799).
  • На PostgreSQL при отсутствии доступа к базе данных postgres Django теперь возвращается к базе данных по умолчанию, когда обычно требуется соединение «без базы данных» (#24791).
  • Исправлено отображение виджета contrib.admin ForeignKey, когда он используется в ряду с другими полями (#24784).
Вернуться на верх