年关将至,Django 5.0 正式发布,最流行 Python Web 框架

年关将至,Django 5.0 正式发布,最流行 Python Web 框架

2023 年即将画上句点,而 Django5 则像一颗耀眼的新星般闪亮登场!这个备受期待的全新版本不仅承载着众多期待,更将给 Python Web 开发带来一场前所未有的革命。让我们一起揭开 Django5 的神秘面纱,探寻其中蕴藏的无限可能,为全新的一年添上一抹绚丽的色彩!

  新功能与变化

简化了表单字段的展示方式

 

引入了字段组 as_field_group的概念和字段组模板。 这简化了 Django 表单字段相关元素的渲染

 
如下面的模板
<form>
...
<div>
  {{ form.name.label_tag }}
  {% if form.name.help_text %}
    <div class="helptext" id="{{ form.name.auto_id }}_helptext">
      {{ form.name.help_text|safe }}
    </div>
  {% endif %}
  {{ form.name.errors }}
  {{ form.name }}
  <div class="row">
    <div class="col">
      {{ form.email.label_tag }}
      {% if form.email.help_text %}
        <div class="helptext" id="{{ form.email.auto_id }}_helptext">
          {{ form.email.help_text|safe }}
        </div>
      {% endif %}
      {{ form.email.errors }}
      {{ form.email }}
    </div>
    <div class="col">
      {{ form.password.label_tag }}
      {% if form.password.help_text %}
        <div class="helptext" id="{{ form.password.auto_id }}_helptext">
          {{ form.password.help_text|safe }}
        </div>
      {% endif %}
      {{ form.password.errors }}
      {{ 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>

数据库层定义字段的默认值

引入了新参数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允许创建数据库时通过计算生成额外的列。该字段可在所有支持的数据库后端上使用,以创建始终根据其他字段计算的字段。例如下例中area字段时根据side的数值自动生成的。

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"),
        output_field=models.BigIntegerField(),
        db_persist=True,
    )

模型的choices参数中传入更灵活的值

Django 5.0 还提升了处理模型字段中的选择的能力。在 Django 的早期版本中,Field.choices 应该是二元组列表,或者是枚举类型子类。Django 5.0支持使用映射或可调用对象(而不仅仅是可迭代对象)进行字段选择的选项开辟了动态和上下文响应字段选项的全新领域。
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": {"badminton": "Badminton", "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.

总体而言,虽然 Django5 更新的功能并不是非常多,但这些改进对于 Python Web 开发来说仍具有重要意义。它们简化了开发过程、提升了代码的可读性和可维护性,为开发者带来了更高的效率和更好的开发体验。随着 Django5 的发布,我们期待在新的一年里看到 Python Web 开发的革命性变化和更加绚丽的色彩。

 
 
 
 
 
 
© 版权声明
THE END
喜欢就支持一下吧
点赞0赞赏 分享
评论 抢沙发
头像
这里是评论区,不是无人区
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容