Django5.0正式发布!
Django5.0正式发布!
VTtalk
Python程序员,现自由职业者
昨天,Django官方网站正式对外发布了Django5.0这个大版本。
Django这个框架诞生于2005年,我差不多是13年开始用它,那时候还是1.x版本,刚接触就被它迷人的特性吸引,竟然不要写代码就有自带有管理后台系统。
现在我用Flask更多,但是依然还有系统是用Django在跑,版本一直停留在2.x,遵循的原则就是,代码能跑就不去动它。
Django目前是Python领域的三大Web框架之一,Flask以小巧著称,FastAPI是最近几年出来的后起之秀,以速度著称,而Django是大而全,这三个主流框架都很好的找到了自己的差异性,因此都获得了一批忠实粉丝。
赶紧来看看这次Django5.0都有哪些更新吧
管理员界面的 Facet 过滤器 通过引入 facet 过滤器,现在在 Django 管理界面管理数据比以往更容易。通过 UI 开启时,facet 过滤器会在管理员变更列表中显示应用过滤器的计数。这个特性可以通过新的 Modeladmin126459646.show_facets 属性进行自定义,为用户提供了更直观的数据过滤和探索方式。
简化的表单字段渲染模板 Django 5.0 引入了“字段组”和字段组模板的概念,简化了 Django 表单字段的渲染。这种简化大大减少了渲染表单元素所需的 HTML 和模板代码量,使得模板更加简洁和易于维护。
例如,以下模板:
<
form
>
...
<
div
>
{{ form.name.label_tag }}
...
{{ form.name }}
<
div
class
=
"row"
>
...
<
div
class
=
"col"
>
{{ form.email.label_tag }}
...
{{ form.email }}
</
div
>
<
div
class
=
"col"
>
{{ form.password.label_tag }}
...
{{ form.password }}
</
div
>
</
div
>
</
div
>
...
</
form
>
现在可以简化为:
<
form
>
...
<
div
>
{{ form.name.as_field_group }}
<
div
class
=
"row"
>
<
div
class
=
"col"
>
{{ form.email.as_field_group }}
</
div
>
<
div
class
=
"col"
>
{{ form.password.as_field_group }}
</
div
>
</
div
>
</
div
>
...
</
form
>
数据库计算的默认值
使用新的 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())
数据库生成的模型字段
新的 GeneratedField 使开发者能够在 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
)
声明字段Choice的更多选项 Django 5.0 增强了声明字段选择的灵活性。ni 现在可以使用映射或可调用对象而不是可迭代对象来定义选择,这使得为模型和表单字段定义选择变得更加容易。这个更新简化了选择的管理,并允许动态的选项。
from django.db import models
Medal = models.TextChoices(
"Medal"
,
"GOLD SILVER BRONZE"
)
SPORT_CHOICES = {
# Using a mapping instead of a list of 2-tuples.
"Martial Arts"
: {
"judo"
:
"Judo"
,
"karate"
:
"Karate"
},
"Racket"
: {
"badmin126459646ton"
:
"Badmin126459646ton"
,
"tennis"
:
"Tennis"
},
"unknown"
:
"Unknown"
,
}
def get_scores():
return
[(i, str(i))
for
i
in
range(10)]
class Winner(models.Model):
name = models.CharField(...)
medal = models.CharField(..., choices=Medal)
# Using `.choices` not required.
sport = models.CharField(..., choices=SPORT_CHOICES)
score = models.IntegerField(choices=get_scores)
# A callable is allowed.
```
另外还带来了许多小特性和各个框架的改进。包括对管理员站点的增强、异步认证函数、对地理空间操作的扩展支持、消息处理的改进等
感兴趣的可以直接升级体验一波
pip install django --upgrade
```
Python交流学习群(技术交流、摸鱼为主)开放,感兴趣的朋友,可以在上方公号内回复:1024,即可进入
-
2023年血糖新标准公布,不是3.9-6.1,快来看看你的血糖正常吗? 2023-02-07
-
2023年各省最新电价一览!8省中午执行谷段电价! 2023-01-03
-
GB 55009-2021《燃气工程项目规范》(含条文说明),2022年1月1日起实施 2021-11-07
-
PPT导出高分辨率图片的四种方法 2022-09-22
-
2023年最新!国家电网27家省级电力公司负责人大盘点 2023-03-14
-
全国消防救援总队主官及简历(2023.2) 2023-02-10
-
盘点 l 中国石油大庆油田现任领导班子 2023-02-28
-
我们的前辈!历届全国工程勘察设计大师完整名单! 2022-11-18
-
关于某送变电公司“4·22”人身死亡事故的快报 2022-04-26
