Django 4.0 正式发布,新的密码哈希器和 Redis 缓存后端
Django 4.0 正式发布,4.0 版本支持 Python 3.8、3.9 和 3.10。随着 Django 4.0 的发布,Django 3.2 的主流支持已经结束。此版本主要有如下亮点:
- 新的 RedisCache 后端为使用 Redis 缓存提供了内置支持。
- 现在使用模板引擎呈现 Forms、Formsets 和 ErrorList ,以简化自定义的过程。
- 引入新的密码哈希函数 scrypt,但因为需要更多内存且依赖 OpenSSL 1.1+ ,不是默认启用项
- Python 标准库的 zoneinfo 现在作为 Django 中的默认时区。
- 新增函数式唯一约束。
- ...
重要更新
zoneinfo
作为默认时区
Django 3.2 允许使用非 pytz
时区。Django 4.0 是 zoneinfo
作为默认时区:弃用 pytz
且将在 Django 5.0 中删除它。zoneinfo 是 Python 3.9 标准库的一部分,如果你在使用 Python 3.8 ,则会自动安装 zoneinfo 包。
注意,如果你处于非 utc(世界标准时间) 时区,且在使用 pytz normalize() 和 localalize () api,那你可能设置了TIME_ZONE ,需要审查一下代码。4.x 系列版本周期有一个过渡性的 use_depreccated_pytz
设置,允许从 pytz
慢慢过渡到 zoneinfo
,这个设置将在 Django 5.0 中删除。
此外,zoneinfo 作者创建的 pytz_deprecation_shim
包用于帮助从 pytz
进行迁移,这个包提供 shims 来安全地移除 pytz
,还有一个详细的迁移指南,展示如何移动到新的 zoneinfo
api。渐进更新可以用 pytz_deprecation_shim和use_depreccated_pytz 这两个过渡设置。
函数的唯一约束
UniqueConstraint()
的新 *expressions
位置参数可以在表达式和数据库函数上创建函数式唯一约束。例如:
from django.db import models from django.db.models import UniqueConstraint from django.db.models.functions import Lower class 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', ), ]
使用该 Meta.constraints
选项将函数唯一约束添加到模型中 。
增加 scrypt
密码哈希器
新的 scrypt
密码哈希器比 PBKDF2 更安全,建议使用。但它不是默认选项,因为它需要 OpenSSL 1.1 以上版本和更多的内存。
Redis 缓存后端
新的django.core.cache.backends.redis.RedisCache
缓存后端为使用 Redis 缓存提供了内置支持。此功能需要 redis-py 3.0.0 或更高版本。
基于模板的表单渲染
使用模板引擎渲染表单,如用于表单的 render()
, get_context()
和 template_name
,用于表单集的五个渲染相关的属性和方法。
次要更新项:
django.contrib.admin
admin/base.html
模板现在有一个header
,包含管理站点标题的新模块。ModelAdmin.get_formset_kwargs()
方法允许自定义传递给表单集构造函数的关键字参数。- 侧边栏的导航有一个快速过滤器工具栏。
- 新的上下文变量模型(包含每个模型的模型类)被添加到
AdminSite.each_context()
方法中。 - 新
ModelAdmin.search_help_text
属性允许为搜索框指定描述性文本 - jQuery 从 3.5.1 版本升级到 3.6.0。
django.contrib.auth
- PBKDF2 密码散列器的默认迭代计数从 260,000 增加到 320,000。
- 新的
LoginView.next_page
属性和get_default_redirect_url()
方法允许在登录后自定义重定向。
django.contrib.gis
- 添加了对 SpatiaLite 5 的支持。
GDALRaster
现在允许在任何 GDAL 虚拟文件系统中创建栅格。
django.contrib.postgres
- PostgreSQL 后端现在支持通过服务名称进行连接。详情请参见 PostgreSQL 连接配置。
- 新
AddConstraintNotValid
操作允许在 PostgreSQL 上创建检查约束,而无需验证所有现有行是否满足新约束。 - 新
ValidateConstraint
操作允许验证AddConstraintNotValid
在 PostgreSQL 上创建的检查约束 。 - 新
ArraySubquery()
表达式允许使用子查询在 PostgreSQL 上构建值列表。 - 新的
trigram_word_similar
查找和TrigramWordDistance()
和TrigramWordSimilarity()
表达式允许使用三元组词汇相似性(trigram word similarity)。
django.contrib.staticfiles
ManifestStaticFilesStorage
现在将 JavaScript 源映射引用的路径换成它们自己的散列对应路径。ManifestFilesMixin
和ManifestStaticFilesStorage
的新参数manifest_storage
允许自定义清单文件的存储。
缓存
新的异步 API: django.core.cache.backends.base.BaseCache
开始使缓存后端异步兼容。新的异步方法都有 a
前缀的名称,例如aadd()
,aget()
,aset()
, aget_or_set()
,或adelete_many()
。
以后 a
前缀一般会用于方法的异步变体。
CSRF
- CSRF 保护现在参考
Origin
标头(如果存在)。为此需要对CSRF_TRUSTED_ORIGINS
设置进行一些更改。
国际化
- 添加了对马来语的支持和翻译。
通用视图
DeleteView
现在使用 FormMixin
,允许您提供一个 Form
子类,例如带有确认删除之类的复选框。
日志
- SQL 调用中使用的数据库别名现在作为额外的上下文,与每条消息一起传递给 django.db.backends 记录器。
管理命令
runserver
管理命令现在支持--skip-checks
选项。- 在 PostgreSQL 上,
dbshell
现在支持指定密码文件。 - 新的
BaseCommand.suppressed_base_arguments
属性允许在输出中阻止不支持的命令选项。 - 新的
startapp——exclude
和startproject——exclude
选项允许从模板中排除目录
模块
- 新
QuerySet.contains(obj)
方法返回查询集是否包含给定的对象,会尝试以最简单和最快的方式执行查询。 - 数据库函数
Round()
有新的precision
参数,允许指定舍入的小数位数。 QuerySet.bulk_create()
现在在使用 SQLite 3.35+ 时设置对象的主键。DurationField
现在支持在 SQLite 上乘以和除以标量值。QuerySet.bulk_update()
现在返回更新后的对象数。- 新的
Expression.empty_result_set_value
属性允许指定函数在空集上使用时返回什么值。 QuerySet.select_for_update()
的skip_locked
参数,现在允许在 MariaDB 10.6 以上版本使用。Lookup
现在可以在QuerySet
注释、聚合中使用表达式,且可以直接在过滤器中使用。
请求和响应
SecurityMiddleware
现在增加了跨来源打开器策略(Cross-Origin-Opener-Policy)标头的值:'same-origin'
,以防止交叉来源的弹出窗口请求共享同一浏览器的上下文,使用 COOP 隔离窗口是一种针对跨域攻击的深度防御保护,尤其是像 Spectre 这样的攻击(允许外泄加载到共享浏览上下文中的数据)。
信号
- 用于
pre_migrate()
和post_migrate()
信号的新stdout
参数,允许将输出重定向到一个类似流的对象。 - 为了在测试时正确捕获,它应该优先于 并且在发出详细输出时。
pre_migrate()
post_migrate()
sys.stdout
print()
模板
floatformat
模板过滤器现在允许使用u
后缀强制禁用本地化。
测试¶
django.test.utils.setup_databases()
的新参数serialized_aliases
可以决定哪些DATABASES
别名测试数据库应该将自身状态序列化,以允许使用 serialized_rollback 功能。- Django 测试运行器现在支持
--buffer
并行测试选项。 DiscoverRunner
的新logger
参数允许使用 Python 记录器进行日志记录。- Django 测试运行器现在支持
--shuffle
以随机顺序执行测试的选项。 test --parallel
选项现在支持auto
值:为每个处理器核心运行一个测试进程。TestCase.captureOnCommitCallbacks()
现在捕获执行transaction.on_commit()
回调时添加的新回调。
Django 4.0 是一个超大版本更新,除了上述更新以外还包含一些功能的弃用,以及不向后兼容的更新项,完整版更新内容可在更新公告中查看。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Material UI 5.2.3 发布,Material Design 的 React 组件
Material UI 5.2.3 发布了,Material UI 是一组实现 Google Material Design 规范的 React 组件,它是一个前端 JS 框架,主要用在 web 领域。 更新内容如下: 在@mui/base:TablePagination中引入了一个新的无样式组件: 可以在#27170关注使用无样式组件的进展。 添加了一个将 MUI 与Remix结合使用的示例(#29952) @mui/material@5.2.3 [Accordion] 添加对square属性的测试(#29972) [AvatarGroup] 允许指定 avatars 的总数(#29898) [Button]修复了从上下文 API 回归的问题(#29982) [Grid]复值为 objec t时为spacing属性生成的类(#29880) [Select] 修复启用multiple并传递空数组时的崩溃问题 (#29957) @mui/system@5.2.3 [system] 修复createBox的返回类型 (#29989) [system] 在 typescript ...
- 下一篇
GraalVM 社区版 19.3.6 正式发布
GraalVM 社区版 19.3.6 已发布。GraalVM是Oracle打造的高性能跨语言虚拟机,支持运行JavaScript、Python 3、Ruby、R、基于JVM的语言(如Java、Scala和Kotlin),以及基于LLVM的语言,如C和C++。 此外,GraalVM 在编程语言之间具有高效的互操作性,并可提前将 Java 应用程序编译为本地可执行文件,以加快启动时间,降低内存开销。 GraalVM 社区发行版包括: 带有 GraalVM 编译器的 Java runtime 带有 GraalVM JavaScript 解释器的 Node.js runtime LLVM runtime 开发者监控和调试工具 GraalVM 环境可以通过GraalVM Updater 工具使用可选的可用组件进行扩展,例如 Native Image、Ruby、R、Python、LLVM 工具链、WebAssembly 和 Espresso。 该版本是一个重要补丁更新 (CPU) 版本,并且是 GraalVM 社区版 19.3.x 的最后一个版本。 主要更新内容 基于 Java 8 的 Graal...
相关文章
文章评论
共有0条评论来说两句吧...