Django 5.0 带来的5个惊艳新特性

写在前面

Django 是一个知名的 Python 网络框架, 刚刚迎来它的第 5 个大版本更新。这篇文中中,我将罗列其中最重要的 5 个新特性,你可以在现在的项目中尝试这些新特性,当然也可以在未来的新项目中使用这些特性。

目录

  1. 更简单的表单字段渲染
  2. 用于计算和生成列的模型字段
  3. 更容易的选择字段编写
  4. 更多的异步视图装饰器
  5. 异步断连的异常处理

1. 更简单的表单字段渲染

Django 中的表单字段通常包含描述性标签、帮助文本、错误标签和字段本身等多个元素。如果表单中有多个这样的字段,手动布局就会很繁琐。

为了解决这个问题,Django 5.0 提供了一种新的表单字段组合方法方法。只需要在模板中使用.as_field_group方法,系统就可以根据自定义的模板自动渲染字段组中的所有元素。

通过使用字段组,您可以将原本繁琐代码的代码简化,如下所示:


{{ form.username.label_tag }}
{% if form.username.help_text %}
<div class="helptext" id="{{ form.username.auto_id }}_helptext">
    {{ form.username.help_text|safe }}
</div>
{% endif %}
{{ form.username.errors }}
{{ form.username }}

简化为:

{{ form.name.as_field_group }}

同样,渲染方式是可定制的——你可以自己构建模板来替换应用程序范围的字段组默认模版,或者,只针对单个字段或者特定请求进行自定义操作。

2. 用于计算和生成列的模型字段

数据库中的计算列允许您将列的值定义为某个公式的输出,在将其发送到客户端之前在数据库上计算。

Django 5.0 现在允许您在模型中使用带有database default参数的字段,该参数允许您提供一个数据库计算的默认值。例如,DateTimeField可以使用Now()作为默认值。

Django 5.0 的另一个方便之处是GeneratedField——一个新的字段类型,它的值始终从其他字段的值生成。结果可以在写入或更新行时存储在数据库中(称为”stored”字段),或者仅在读取行时计算(称为”virtual”字段)。

还要注意,GeneratedFields只能使用同一模型中的其他字段作为输入。您也不能将其他生成字段用作源,只能使用实际字段。

3. 更容易的选择字段编写

在之前的 Django 版本中,当您想要列出Field.choicesChoiceField.choices对象可用的选项时,您必须构建一个冗长的 2 元组或 Enumeration 子类的结构。

而在 Django 5.0 中,您可以使用字典映射进行更简洁的声明:

HQ_LOCATIONS = {
    "United States": {"nyc""New York""la""Los Angeles"},
    "Japan": {"tokyo""Tokyo""osaka""Osaka"},
    "virtual""Anywhere",
}

这使得选择项更容易以文字方式编码,并且也更容易以编程方式生成。

4. 更多的异步视图装饰器

Django 在 3.0 版本中首次添加了对 Python 异步机制的支持,但并非 Django 的每个部分支持异步。这是逐步添加支持的过程,4.0 版本中添加了对异步视图的支持,ORM 的支持将在未来的版本中添加。

因为 Django 逐步添加了异步支持,许多装饰器以前不支持包装异步视图。而在 5.0 版本中,许多装饰器现在可以装饰异步视图了。其中最有用的是确保跨站请求伪造(CSRF)保护的装饰器。

5. 异步断连的异常处理

在异步连接中,存在一个风险,一个长时间保持的连接在 Django 返回响应之前可能被关闭。以前,并没有内置机制来处理异步连接被关闭时的清理工作,而 Django 5.0 引入了asyncio.CancelledError异常,你可以根据需要在适当的时候捕获该异常。

总结

新的 Django 将带来更多的异步支持、更简化的表单字段以及更便捷的处理表单选择项的方法。

原文始发于微信公众号(harvey的网络日志):Django 5.0 带来的5个惊艳新特性

© 版权声明
THE END
喜欢就支持一下吧
点赞12 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容