内容简介:Django 4.0 正式发布,4.0 版本支持 Python 3.8、3.9 和 3.10。随着 Django 4.0 的发布,Django 3.2 的主流支持已经结束。此版本主要有如下亮点: 新的 RedisCache 后端为使用 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.stdoutprint()
模板
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 是一个超大版本更新,除了上述更新以外还包含一些功能的弃用,以及不向后兼容的更新项,完整版更新内容可在更新公告中查看。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Mysql用户忘记密码及密码过期问题的处理方法
- 解决记不住密码的问题,“密码戒指”会是最佳方案吗?
- 密码学初学者可以理解的密码学库
- 用户密码加密存储十问十答,一文说透密码安全
- 密码学幼稚园 | 密码朋克的社会实验(二)
- 密码密钥傻傻分不清?认识密码学中的最高机密
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Blockchain Basics
Daniel Drescher / Apress / 2017-3-16 / USD 20.99
In 25 concise steps, you will learn the basics of blockchain technology. No mathematical formulas, program code, or computer science jargon are used. No previous knowledge in computer science, mathema......一起来看看 《Blockchain Basics》 这本书的介绍吧!
