Hacker News 中文摘要

RSS订阅

Django 6.0 新特性一览 -- Django: what’s new in 6.0

文章摘要

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-tasksDatabaseBackend)。
  • 示例python @task def resize_video(video_id): ... resize_video.enqueue(video.id)
  • 背景:源于 Wagtail 需求,历时多年开发,最终纳入核心。

3. 内容安全策略(CSP)支持

  • 功能:通过 ContentSecurityPolicyMiddlewareSECURE_CSP 设置,防御 XSS 攻击。
  • 关键改进
    • Nonce 生成:自动为 <script><style> 标签添加随机 Nonce 属性。
    • 策略配置:支持严格动态策略(CSP.STRICT_DYNAMIC)和报告模式(SECURE_CSP_REPORT_ONLY)。
  • 示例配置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

(注:本文为节选,完整内容请查阅官方发布说明

评论总结

评论总结:

  1. 对模板分片的肯定观点
  • 认为模板分片是React等框架成功的关键因素,因其支持代码片段复用
  • 关键引用:"Template partials look good...you can reuse small segments of code"(模板分片很好...可以复用小的代码片段)
  1. 对作者Adam的高度评价
  • 认为Adam编写的任何代码或博客都值得花时间阅读
  • 关键引用:"Any code or blog written by Adam is worth spending some time on"(Adam写的任何代码或博客都值得花时间阅读)
  1. 对任务框架发展的期待
  • 对Django任务框架的发展表示兴趣,但对Celery评价负面
  • 关键引用:"I am sad to see...lumped in with the awful Celery"(很遗憾看到...和糟糕的Celery混为一谈)
  1. 相关讨论链接
  • 提供了更深入讨论的链接
  • 关键引用:"More discussion: [链接]"(更多讨论:[链接])