Django 1.8.2 版本发行说明
2015 年 5 月 20 日
Django 1.8.2 修复了 1.8.1 中的一个安全问题和几个错误。
修复了 cached_db
后端中的会话刷新问题
Django 1.8 中对于 cached_db
会话后端中的 session.flush()
的更改错误地将会话键设置为空字符串而不是 None
。空字符串被视为有效的会话键,并且会相应地设置会话 cookie。任何在其会话 cookie 中具有空字符串的用户都将使用相同的会话存储。session.flush()
被 django.contrib.auth.logout()
调用,并且更严重的是,当用户切换帐户时也会被 django.contrib.auth.login()
调用。如果用户已登录并且再次登录到不同的帐户(而不注销),则会刷新会话以避免重复使用。在会话被刷新后(其会话键变为 ''
),帐户详细信息会设置在会话中,并且会话会被保存。任何在其会话 cookie 中具有空字符串的用户现在将登录到该帐户。
漏洞修复
- 修复了对模板引擎别名唯一性的检查问题 (#24685)。
- 修复了在查询中重复使用相同的
Case
实例时发生崩溃的问题 (#24752)。 - 修正了
Case
表达式的联接升级。例如,使用Case
表达式对查询进行注释可能会意外地过滤结果 (#24766)。 - 修复了表达式中否定的
Q
对象。例如,像Case(When(~Q(friends__age__lte=30)))
这样的情况试图生成一个子查询,导致崩溃 (#24705)。 - 修复了当查询的模型具有自引用外键时,在 MySQL 上生成不正确的 GROUP BY 子句的问题 (#24748)。
- 实现了
ForeignKey.get_db_prep_value()
,以便正确处理指向具有UUIDField
主键的模型和带有UUIDField
主键的模型的继承 (#24698, #24712)。 - 修复了
HStoreField
的isnull
查询 (#24751)。 - 修复了在迁移中删除包含外键的联合索引(
unique_together
或index_together
)时在 MySQL 上发生崩溃的问题 (#24757)。 - 修复了在使用 SESSION_COOKIE_DOMAIN 时删除会话 cookie 的问题 (#24799)。
- 在 PostgreSQL 上,当未授予
postgres
数据库的访问权限时,Django 现在会在通常需要“无数据库”连接时回退到默认数据库 (#24791)。 - 修复了在与其他字段一起使用时,
contrib.admin
的ForeignKey
小部件的显示问题 (#24784)。