Last update on .

2021年12月7日Django 4.0正式发布,感觉这两年Django版本更新的过快,这次4.0版本总体来说更新的内容真心不多。不管怎样,还是过一下Django4.0的最新功能。

一、关于Python兼容性

Django4.0支持Python3.8、3.9和3.10,Django 3.2.x支持Python3.6和3.7。Django推荐使用Python官网中每个系列的最终版本。

根据Django官网的版本支持计划,本次的4.0版本支持到2023年8月。3.2 LTS版本支持到2024年8月。所以如果仍在使用3.2版可以不用着急升级,因为升级到4.0反而支持期限较短。在这里可以查看到Django各个版本的支持计划:https://www.djangoproject.com/download/

 

二、Django 4.0的主要新特性

zoneinfo成为默认的时区库

4.0开始,Django的默认时区库采用zoneinfo。Zoneinfo是Python3.9开始加入的一个标准模块。pytz包在Django3.2之前一直作为默认时区库,在4.0中不推荐使用,在5.0中将被移除。另外在Python3.8环境中安装Django 4.0时会自动安装backports.zoneinfo代替zoneinfo。如果仍想4.0中兼容pytz,在settings.py中使用

  • USE_DEPRECATED_PYTZ = True

更加实用的唯一约束(Functional unique constraints)

这个功能理解起来不难,其实就是在UniqueConstraint()函数的参数中,可以使用数据库表达式。如下面代码中的desc()

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

 

密码哈希加密(scrypt password hasher)

Django 4.0中新的密码哈希加密比PBKDF2更加安全,所以推荐使用。但是使用这个功能需要OpenSSL 1.1以上才可以,另外内存使用量比其他的哈希加密要多。

Redis cache backend后端缓存

在4.0之前,Django使用Redis需要安装django-redis。从4.0开始,Redis后端缓存变为内置功能,使用的是Python包中的redis-py包,具体使用可以参考:https://docs.djangoproject.com/en/dev/topics/cache/#redis

基于模板的表单渲染

官方表述为增强了模板自定义渲染功能。其实具体表现为:

  • 表单相关的类(Forms, Formsets和ErrorList)中增加了template_name属性。

  • Django模板中传入form实例之后,原来模板中的{{form}}将自动生成表单相关代码。增加了template_name属性后,可以在另一个模板中自定义form,在渲染from时候采用template_name指定的模板而不是默认生成表单。表现形式就是下面代码这样,contact.html就是具体的模板。

​​​​​classContactForm(forms.Form):    
    template_name ="contact/forms/contact.html"

三、其他较小的变化

1. admin后台的导航侧边栏新增了快速过滤工具栏;

2. auth模块的PBKDF2密码哈希的迭代次数从260,000提高到320,000;

3. postgres数据库连接支持服务名;

4. staticfiles中增加支持自定义manifest file storage;

5. 新增异步的缓存后端django.core.cache.backends.base.BaseCache;

6. Forms中ModelChoiceField、BaseFormSet等功能增强;

7. 通用视图DeleteView使用FormMixin类,允许提供一个Form子类例如删除确认框功能;

8. 日志功能中增加别名数据库传递额外内容;

9. 若干管理命令功能增强;

10. 其他包括Models、Requests and Responses、Signals、Templates、Tests等细微改进,就不一一列举了。

 

四、参考

https://docs.djangoproject.com/en/dev/releases/4.0/

https://www.cnblogs.com/django-dev/p/15659935.html

 

文章同步更新至公众号“Django编程”

评论

No comments yet.

Please log in by using LinkedIn Weibo to leave a comment.