文章摘要
Django 6.0发布,代号"mosaic",包含多项新特性。作者推荐使用django-upgrade工具帮助从旧版本升级,该工具可自动更新代码以适应新功能并修复部分弃用警告。文章还提到模板部分等更新内容。
文章总结
Django 6.0 新特性概览
发布日期:2025年12月3日
代号:"Mosaic"
框架年龄:20周年
Django 6.0 带来了多项重要更新,以下是核心亮点:
1. 模板片段(Template Partials)
- 功能:新增
{% partialdef %}和{% endpartialdef %}标签,支持在模板内定义可复用的命名片段。 - 用途:
- 同一模板内复用:避免重复代码,无需拆分为独立文件。
- 独立渲染:结合 HTMX 实现动态内容更新(如实时视图计数)。
- 示例:
html {% partialdef filter_controls inline %} <form>{{ filter_form }}</form> {% endpartialdef %} {% partial filter_controls %} - 背景:受 HTMX 启发,由 Carlton Gibson 的第三方包整合而来。
2. 内置任务框架(Tasks Framework)
- 功能:提供
@task装饰器和Task.enqueue()方法,支持后台任务(如邮件发送、数据处理)。 - 特点:
- 开发环境:支持同步执行(
ImmediateBackend)和模拟执行(DummyBackend)。 - 生产环境:需配合第三方后端(如
django-tasks的DatabaseBackend)。
- 开发环境:支持同步执行(
- 示例:
python @task def resize_video(video_id): ... resize_video.enqueue(video.id) - 背景:源于 Wagtail 需求,历时多年开发,最终纳入核心。
3. 内容安全策略(CSP)支持
- 功能:通过
ContentSecurityPolicyMiddleware和SECURE_CSP设置,防御 XSS 攻击。 - 关键改进:
- Nonce 生成:自动为
<script>和<style>标签添加随机 Nonce 属性。 - 策略配置:支持严格动态策略(
CSP.STRICT_DYNAMIC)和报告模式(SECURE_CSP_REPORT_ONLY)。
- Nonce 生成:自动为
- 示例配置:
python SECURE_CSP = { "script-src": [CSP.NONCE, CSP.STRICT_DYNAMIC], "object-src": [CSP.NONE] } - 背景:基于
django-csp包,由 Rob Hudson 主导整合。
4. 现代化邮件 API
- 底层升级:改用 Python 3.6+ 的
email.message.EmailMessage,修复旧 API 的 Unicode 和边缘问题。 - 新特性:
- 内联附件:通过
MIMEPart对象简化 HTML 邮件中的图片嵌入。 - 强制关键字参数:提升
send_mail()等函数的可读性。
- 内联附件:通过
- 示例:
python email = EmailMessage( subject="主题", body="内容", from_email="发件人", to=["收件人"] ) email.attach(MIMEPart(...)) - 背景:由 Mike Edmunds 推动,历时 8 个月完成迁移。
其他重要改进
- ORM 增强:
- 动态字段刷新:
save()后自动更新GeneratedField和表达式字段(支持 PostgreSQL/SQLite/Oracle)。 - 跨数据库
StringAgg:原仅限 PostgreSQL 的字符串聚合现支持所有后端。
- 动态字段刷新:
- 默认主键类型:
DEFAULT_AUTO_FIELD默认改为BigAutoField,避免主键耗尽问题。 - 模板工具:
forloop.length:新增循环总长度变量。querystring标签:支持多参数合并,空参数时输出?以清除查询。
升级建议:使用工具 django-upgrade 自动化代码迁移。
致谢:感谢 174 位贡献者,详见完整列表。
——Adam Johnson
(注:本文为节选,完整内容请查阅官方发布说明)
评论总结
评论总结:
- 对模板分片的肯定观点
- 认为模板分片是React等框架成功的关键因素,因其支持代码片段复用
- 关键引用:"Template partials look good...you can reuse small segments of code"(模板分片很好...可以复用小的代码片段)
- 对作者Adam的高度评价
- 认为Adam编写的任何代码或博客都值得花时间阅读
- 关键引用:"Any code or blog written by Adam is worth spending some time on"(Adam写的任何代码或博客都值得花时间阅读)
- 对任务框架发展的期待
- 对Django任务框架的发展表示兴趣,但对Celery评价负面
- 关键引用:"I am sad to see...lumped in with the awful Celery"(很遗憾看到...和糟糕的Celery混为一谈)
- 相关讨论链接
- 提供了更深入讨论的链接
- 关键引用:"More discussion: [链接]"(更多讨论:[链接])