当前位置: 首页 > 科技观察

Django4.0正式发布,新的密码哈希器和Redis缓存后端

时间:2023-03-15 09:45:31 科技观察

Django4.0正式发布,4.0版本支持Python3.8、3.9和3.10。随着Django4.0的发布,对Django3.2的主流支持已经结束。此版本的主要亮点如下:新的RedisCache后端提供对使用Redis缓存的内置支持。表单、表单集和错误列表现在使用模板引擎呈现以简化定制。引入了新的密码哈希函数scrypt,但默认情况下未启用,因为它需要更多内存并依赖于OpenSSL1.1+。Python标准库的zoneinfo现在用作Django中的默认时区。添加功能唯一约束。...作为默认时区的zoneinfo的重要更新Django3.2允许非pytz时区。Django4.0使用zoneinfo作为默认时区:pytz已弃用,并将在Django5.0中删除。zoneinfo是Python3.9标准库的一部分,如果您使用的是Python3.8,则会自动安装zoneinfo包。请注意,如果您处于非utc(通用坐标时间)时区并使用pytznormalize()和localize()api,那么您可能已经设置了TIME_ZONE并且需要查看代码。4.x系列发布周期有一个过渡性的use_depreccated_pytz设置,允许从pytz到zoneinfo的缓慢过渡,这个设置将在Django5.0中被删除。此外,由zoneinfo作者创建的pytz_deprecation_shim程序包可帮助从pytz迁移,该程序包提供垫片以安全删除pytz,以及详细的迁移指南,显示如何移动到新的zoneinfoapi。可以使用两个转换pytz_deprecation_shim和use_depreccated_pytz设置渐进更新。功能唯一约束UniqueConstraint()的新*expressions位置参数,用于在表达式和数据库函数上创建功能唯一约束。例如:fromdjango.dbimportmodelsfromdjango.db.modelsimportUniqueConstraintfromdjango.db.models.functionsimportLowerclassMyModel(models.Model):first_name=models.CharField(max_length=255)last_name=models.CharField(max_length=255)classMeta(UniquerConstraints=['first_name'),Lower('last_name').desc(),name='first_last_name_unique',),]使用Meta.constraints选项向模型添加功能唯一约束。添加了scryptpasswordhasher新的scryptpasswordhasher比PBKDF2更安全,推荐使用。但它不是默认选项,因为它需要OpenSSL1.1+和更多内存。Redis缓存后端新的django.core.cache.backends.redis.RedisCache缓存后端为使用Redis缓存提供内置支持。此功能需要redis-py3.0.0或更高版本。基于模板的表单渲染使用模板引擎来渲染表单,例如表单的render()、get_context()和template_name,以及表单集的五个渲染相关的属性和方法。次要更新:django.contrib.adminadmin/base.html模板现在有一个标题,其中包含管理站点标题的新模块。ModelAdmin.get_formset_kwargs()方法允许自定义传递给表单集构造函数的关键字参数。侧边栏中的导航有一个快速筛选工具栏。AdminSite.each_context()方法中添加了新的上下文变量模型(包含每个模型的模型类)。新的ModelAdmin.search_help_text属性允许为从版本3.5.1升级到3.6.0的jQuery搜索框指定描述性文本。将django.contrib.authPBKDF2密码哈希器的默认迭代计数从260,000增加到320,000。新的LoginView.next_page属性和get_default_redirect_url()方法允许在登录后自定义重定向。django.contrib.gis添加了对SpatiaLite5的支持。GDALRaster现在允许在任何GDAL虚拟文件系统中创建栅格。django.contrib.postgresPostgreSQL后端现在支持按服务名称连接。有关详细信息,请参阅PostgreSQL连接配置。新的AddConstraintNotValid操作允许在PostgreSQL上创建检查约束,而无需验证所有现有行是否满足新约束。新的ValidateConstraint操作允许验证AddConstraintNotValid在PostgreSQL上创建的检查约束。新的ArraySubquery()表达式允许使用子查询在PostgreSQL上构建值列表。新的trigram_word_similar查找和TrigramWordDistance()和TrigramWordSimilarity()表达式允许使用trigram词相似度。django.contrib.staticfilesManifestStaticFilesStorage现在用它们自己的散列副本替换JavaScript源映射引用的路径。ManifestFilesMixin和ManifestStaticFilesStorage的新参数manifest_storage允许自定义清单文件的存储。用于缓存的新异步API:django.core.cache.backends.base.BaseCache开始使缓存后端异步兼容。新的异步方法的名称以a为前缀,例如aadd()、aget()、aset()、aget_or_set()或adelete_many()。将来,a前缀通常用于方法的异步变体。CSRFCSRF保护现在指的是Origin标头(如果存在)。这需要对CSRF_TRUSTED_ORIGINS设置进行一些更改。国际化添加了对马来语的支持和翻译。通用视图DeleteView现在使用FormMixin,允许您提供一个Form子类,例如确认删除的复选框。用于记录SQL调用的数据库别名现在作为附加上下文与每条消息一起传递给django.db.backends记录器。管理命令runserver管理命令现在支持--skip-checks选项。在PostgreSQL上,dbshel??l现在支持指定密码文件。新的BaseCommand.suppressed_base_arguments属性允许在输出中抑制不受支持的命令选项。新的startapp--exclude和startproject--exclude选项允许从模板中排除目录模块新的QuerySet.contains(obj)方法返回查询集是否包含给定对象,将尝试以最简单和最快的方式执行查询。数据库函数Round()有一个新的精度参数,允许指定四舍五入的小数位数。QuerySet.bulk_create()现在在使用SQLite3.35+时设置对象的主键。DurationField现在支持在SQLite上乘以和除以标量值。QuerySet.bulk_update()现在返回更新对象的数量。新的Expression.empty_result_set_value属性允许指定函数在空集上使用时返回的值。MariaDB10.6+现在允许QuerySet.select_for_update()的skip_locked参数。查找现在可以在QuerySet注释、聚合和直接在过滤器中使用表达式。RequestandResponseSecurityMiddleware现在增加了Cross-Origin-Opener-Policy标头值:'same-origin'以防止跨源弹出请求共享相同的浏览器上下文,使用COOPWindow进行隔离是针对跨域的深度防御保护源攻击,尤其是像Spectre这样的攻击(它允许将加载到共享浏览上下文中的数据泄露)。信号pre_migrate()和post_migrate()信号的新标准输出参数,允许将输出重定向到类似流的对象。为了在测试时正确捕获,它应该优先于和发出详细输出。pre_migrate()post_migrate()sys.stdoutprint()模板floatformat模板过滤器现在允许强制禁用带有u后缀的本地化。用于测试django.test.utils.setup_databases()的新参数serialized_aliases以确定测试数据库应序列化其自身状态以允许使用serialized_rollback功能的DATABASES别名。Django测试运行器现在支持用于并行测试的--buffer选项。DiscoverRunner的新记录器参数允许使用Python记录器进行记录。Django测试运行器现在支持--shuffle选项以随机顺序执行测试。test--parallel选项现在支持一个自动值:每个处理器内核运行一个测试进程。TestCase.captureOnCommitCallbacks()现在捕获在执行transaction.on_commit()回调时添加的新回调。Django4.0是一次超大版本更新。除了上述更新之外,它还包括一些不向后兼容的功能和更新的弃用。完整版更新可在更新公告中查看。