写在前面
Django 是一个知名的 Python 网络框架, 刚刚迎来它的第 5 个大版本更新。这篇文中中,我将罗列其中最重要的 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.choices
和ChoiceField.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个惊艳新特性
暂无评论内容