跳转到主要内容

热门内容

今日:


总体:


最近浏览:


Chinese, Simplified

Django 4.0 于 2021 年 12 月 7 日发布

Python 兼容性

Django 4.0 支持 Python 3.8、3.9 和 3.10。强烈推荐,并且仅官方支持每个系列的最新版本。

注意力:

Django 3.2.x 系列是最后一个支持 Python 3.6 和 3.7

关于 Django 4.0 你需要知道的那些事



1-您可以使用 Scrypt 密码哈希



新的 scrypt 密码散列器比 PBKDF2 更安全,推荐使用。但是,它不是默认设置,因为它需要 OpenSSL 1.1+ 和更多内存。

scrypt 与 PBKDF2 和 bcrypt 类似,它利用一定数量的迭代来减缓暴力攻击。但是,由于 PBKDF2 和 bcrypt 不需要大量内存,因此资源充足的攻击者可以发起大规模并行攻击,以加快攻击进程。与其他基于密码的密钥派生函数相比,scrypt 专门设计为使用更多内存,以限制攻击者可以使用的并行量。

要使用 scrypt 作为您的默认存储算法,

修改 PASSWORD_HASHERS 以首先列出 ScryptPasswordHasher。也就是说,在您的设置文件中:

PASSWORD_HASHERS = [
    'django.contrib.auth.hashers.ScryptPasswordHasher',
    'django.contrib.auth.hashers.PBKDF2PasswordHasher',
    'django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher',
    'django.contrib.auth.hashers.Argon2PasswordHasher',
    'django.contrib.auth.hashers.BCryptSHA256PasswordHasher',
]



2-请求和响应



SecurityMiddleware 现在添加了值为 'same-origin' 的 Cross-Origin Opener Policy 标头,以防止跨域弹出窗口共享相同的浏览上下文。您可以通过将 SECURE_CROSS_ORIGIN_OPENER_POLICY 设置设置为 None 来防止添加此标头。

3- SecurityMiddleware 不再设置 X-XSS-Production 标头



如果 SECURE_BROWSER_XSS_FILTER 设置为 True,SecurityMiddleware 不再设置 X-XSS-Protection 标头。该设置被删除。

大多数现代浏览器不支持 X-XSS-Protection HTTP 标头。您可以使用 Content-Security-Policy 而不允许使用“不安全内联”脚本。

如果您想支持旧版浏览器并设置标头,请在自定义中间件中使用此行:

response.headers.setdefault('X-XSS-Protection', '1; mode=block')

​​​​​​​4- CSRF-TOKEN



CSRF 保护现在会参考 Origin 标头(如果存在)。为此,需要对 CSRF_TRUSTED_ORIGINS 设置进行一些更改。



5- 通用视图



DeleteView 现在使用 FormMixin 来处理 POST 请求。因此,delete() 处理程序中的任何自定义删除逻辑都应移至 form_valid() 或共享辅助方法(如果需要)。



6- 表格



ModelChoiceField 现在包括在引发的 ValidationError 的 params 参数中为 invalid_choice 错误消息提供的值。这允许自定义错误消息使用 %(value)s 占位符。

BaseFormSet 现在使用额外的非形式类呈现非形式错误,以帮助将它们与特定于表单的错误区分开来。

BaseFormSet 现在允许自定义通过 can_delete 删除表单时使用的小部件,方法是设置 delete_widget 属性或覆盖 get_deletion_widget() 方法。

7-模型



新的 QuerySet.contains(obj) 方法返回查询集是否包含给定对象。这试图以最简单和最快的方式执行查询。

Round() 数据库函数的新精度参数允许指定舍入后的小数位数。

QuerySet.bulk_create() 现在在使用 SQLite 3.35+ 时设置对象的主键。

DurationField 现在支持 SQLite 上的标量值乘除。

QuerySet.bulk_update() 现在返回更新的对象数。

新的 Expression.empty_result_set_value 属性允许指定在函数用于空结果集时要返回的值。

MariaDB 10.6+ 现在允许使用 QuerySet.select_for_update() 的 skip_locked 参数。

查找表达式现在可以在 QuerySet 注释、聚合中使用,也可以直接在过滤器中使用。

内置聚合的新默认参数允许指定在查询集(或分组)不包含条目时返回的值,而不是 None。

8- 功能独特的约束



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:
        constraints = [
            UniqueConstraint(
                Lower('first_name'),
                Lower('last_name').desc(),
                name='first_last_name_unique',
            ),
        ]



使用 Meta.constraints 选项将功能唯一约束添加到模型中。



9- 模板



基于模板的表单渲染

现在使用模板引擎呈现 Forms、Formsets 和 ErrorList 以增强自定义。请参见 Formset 的新 render()、get_context() 和 template_name 和 Formset 渲染。

floatformat 模板过滤器现在允许使用 u 后缀来强制禁用本地化。



10-管理命令



runserver 管理命令现在支持 --skip-checks 选项。

在 PostgreSQL 上,dbshel​​l 现在支持指定密码文件。

shell 命令现在在启动时尊重 sys.__interactivehook__。这允许在交互式会话之间加载 shell 历史记录。因此,如果在隔离模式下运行,则不再加载 readline。

新的 BaseCommand.suppressed_base_arguments 属性允许在帮助输出中抑制不支持的默认命令选项。

新的 startapp --exclude 和 startproject --exclude 选项允许从模板中排除目录。

原文:https://aliarefwriorr.medium.com/top-10-things-you-need-to-know-about-d…

本文:https://jiagoushi.pro/top-10-things-you-need-know-about-django-40

最后修改
星期四, 一月 5, 2023 - 21:57
Tags
 
Article