Django 4.0 首个 RC 版本已发布。
发布公告写道,如果未来两周没有发现无法解决的重大错误,正式版将于 12 月 6 日左右推出。若有延迟会通过开发者邮件列表进行通知。
下载地址:https://www.djangoproject.com/download/
Django 4.0 主要变化
默认时区实现 zoneinfo Python 3.8、3.9 和 3.10Django 3.2.x 系列是 Python 3.6 和 3.7 的最后版本引入新密码哈希函数 scrypt,但因为需要更多内存和 OpenSSL 1.1+ 没有默认启用Redis 缓存后端……使用zoneinfo作为默认时区实现
Python 标准库zoneinfo现在是 Django 的默认时区实现。其中对pytz的已弃用,并将在 Django 5.0 中删除。
根据开发团队的介绍,转向zoneinfo后,当前时区的选择、将日期时间实例转换为表单和模板中的当前时区以及对 UTC 中的 aware datetimes 的操作不受影响。
函数式的唯一约束
UniqueConstraint()的新*expressionspositional 参数可以在表达式和数据库函数上创建函数式唯一约束。例如:
from django.db import modelsfrom django.db.models import UniqueConstraintfrom django.db.models.functions import Lowerclass MyModel(models.Model): first_name = models.CharField(max_length=255) last_name = models.CharField(max_length=255) class Meta: indexes = [ UniqueConstraint( Lower('first_name'), Lower('last_name').desc(), name='first_last_name_unique', ), ]增加scrypt密码哈希器
新的scrypt密码哈希器比 PBKDF2 更安全,建议使用。但它不是默认选项,因为它需要 OpenSSL 1.1 以上版本和更多的内存。
Redis 缓存后端
新的django.core.cache.backs.redis.RedisCache缓存后端为使用 Redis 缓存提供了内置。此功能需要 redis-py 3.0.0 或更高版本。有关更多详细信息,请查看有关在 Django 中使用 Redis 进行缓存的文档。
基于模板的表单渲染
为了提高定制Forms、Formsets 和ErrorList,开发者现在正在使用的模板引擎进行渲染。