Django 5.0 于12月4日正式发布。
Django 5.0 已支持最新的 Python 版本,包括 Python 3.10、3.11 与 3.12。此外它还引入了字段组 (field group),用于简化 Django 表单字段的相关元素的渲染。
下面是Django 5.0 中值得关注的几个重要变化:
Python 兼容性
Django 5.0 支持 Python 3.10、3.11 和 3.12,早期版本将不再支持。开发团队建议用户使用每个 Python 分支的最新版本。
对应的 Django 4.2 因为是 LTS 版本,会一直支持到 2026年04月,但开发团队鼓励所有用户在此之前升级,以继续接收安全问题修复。
Django 4.2.x 系列将是最后一个支持 Python 3.8 和 3.9 的版本。
管理界面中的过滤器
随着分面过滤器(facet filters)的引入,在 Django 管理界面中管理数据现在比以往任何时候都更加容易。通过 UI 开启时,会在管理更改列表中显示已应用过滤器计数。该功能可以使用新的“ModelAdmin.show_facets”属性进行自定义,为开发者提供更直观的方式来过滤和探索数据。
针对表单字段渲染的简化模板
Django 5.0 引入了字段组 (field group) 和字段组模板 (field group templates) 的概念。该特性简化了 Django 表单字段相关元素的渲染,例如标签、小部件、帮助文本和错误等。
比如以前是这样来做表单。如下代码:
...
{{ form.name.label_tag }}
{% if form.name.help_text %}
{{ form.name.help_text|safe }}
{% endif %}
{{ form.name.errors }}
{{ form.name }}
{{ form.email.label_tag }}
{% if form.email.help_text %}
{{ form.email.help_text|safe }}
{% endif %}
{{ form.email.errors }}
{{ form.email }}
{{ form.password.label_tag }}
{% if form.password.help_text %}
{{ form.password.help_text|safe }}
{% endif %}
{{ form.password.errors }}
{{ form.password }}
...
现在,可以简化为:
< form >
...
< div >
{{ form.name.as_field_group }}
< div >
< div > {{ form.email.as_field_group }}
< div > {{ form.password.as_field_group }}
...
可以看到,代码变得非常精简。
数据库计算默认值
现在开发者可使用新的“Field.db_default”参数,可以更轻松地为模型字段设置数据库计算的默认值。此功能允许我们使用数据库函数定义默认值,从而在定义模型默认值时,拥有更大的灵活性和精度。
例如:
from django.db import models
from django.db.models.functions import Now, Pi
class MyModel(models.Model):
age = models.IntegerField(db_default=18)
created = models.DateTimeField(db_default=Now())
circumference = models.FloatField(db_default=2 * Pi())
数据库生成模型字段
新的“GenerateField”能让开发者能够在 Django 模型中创建数据库生成的列(字段)。该字段可以根据模型中的其它字段计算其值,从而简化复杂的计算,并确保数据库级别的数据参照完整性。
例如:
from django.db import models
from django.db.models import F
class Square(models.Model):
side = models.IntegerField()
area = models.GeneratedField(expression=F("side") * F("side"), db_persist=True)
声明字段选择项更灵活
Django 5.0 增强了声明字段选择项的灵活性。现在可以使用映射或可调用而不是可迭代,能更轻松地定义模型和表单字段的选择项。此更新简化了选择的管理并允许更多动态选项。
其它小特征增强
Django 5.0 在框架的各个部分带来了大量的小功能和改进。其它一些值得注意的更新包括:管理站点的增强、异步身份验证功能、对地理空间操作的扩展支持、消息处理的改进等。
向后不兼容的更改
虽然 Django 5.0 引入了足够让人兴奋的新功能,但必须注意到它向后不兼容的修改,这些更改可能需要在代码库中进行调整,因此请各位在开发时在发行说明中仔细查看,以确保顺利过渡。
5.0 中弃用的功能
此外,Django 5.0 也标记了某些功能的弃用和过时。这些功能将在未来的版本中删除,因此建议开发者相应地更新代码,以保持兼容性。
5.0 中删除的功能
对于以前版本中已弃用的一些功能已达到弃用周期,在 Django 5.0 已经删除。请检查代码是否依赖于这些功能,并进行相应的更新,也是非常重要的事情。
Django 的流行度
再来检视一下Django的流行度。
根据JetBrains 进行的2022 年 Python 开发者调查数据披露,39% 的开发者表示使用一种或两种框架,而Django 名列第一。
总结
Django 的大版号更新比较像是常态性把有破坏相容性的更新整理起来出新版,但它并没有做什么大的结构变更。
但是Django 5.0 有可能成为一个令人兴奋的版本,它其中包含大量新功能和改进,这将更多开发者受益并有效简化 Web 开发代码与流程。
让我们一起共同期待这个新鲜发布的Python流行框架。
作者:场长
参考:
https://docs.djangoproject.com/zh-hans/5.0/releases/5.0/
https://blog.jetbrains.com/pycharm/2023/11/django-vs-flask-which-is-the-best-python-web-framework/
https://medium.com/@akshatgadodia/exploring-the-exciting-new-features-of-django-5-0-d938526ead24