本文目录导读:

- Django 5.1(2024年8月发布,当前最新稳定版)
- Django 5.0(2023年12月发布,LTS 之后的下一个版本)
- Django 4.2 LTS(2023年4月发布,长期支持版,推荐用于生产)
- Django 4.1(2022年8月发布)
- 安全性更新(贯穿所有版本)
- 对你的“全栈”开发影响最大的变化:
- 建议:
截至2025年5月,Django的最新稳定版本是 Django 5.1.x(当前为 5.1.7),而 Django 5.2 预计在2025年下半年发布(如果按照往年节奏)。
以下是Django近几个主要版本(从 4.2 LTS 到 5.1)的关键更新内容,可以作为你“全栈框架更新”的参考:
Django 5.1(2024年8月发布,当前最新稳定版)
- 可选的表单字段渲染(
FieldGroup和field_group_type):允许你更灵活地控制表单字段的 HTML 输出,不再强制使用as_p、as_table等固定格式,方便与 HTMX、Tailwind、Bootstrap 等前端框架集成。 - LogoutView 的
POST方法要求:出于安全考虑(防止 CSRF 攻击利用 GET 请求登出用户),LogoutView现在默认要求使用POST方法提交登出请求,GET 请求会返回 405 错误。 LoginRequiredMiddleware:新增的中间件,可以全局设置哪些视图需要登录才能访问,无需在每个视图上手动加@login_required装饰器。- 异步 Queryset 改进:
async版本的方法aget()、acreate()、abulk_create()等得到优化,减少了sync_to_async的消耗。
Django 5.0(2023年12月发布,LTS 之后的下一个版本)
Field.db_default:数据库级别的默认值,以前只能用 Python 端的default,现在可以直接设置数据库字段的默认值(如models.CharField(default="N/A", db_default="N/A")),这对数据迁移和数据库复制更友好。login_required()对 POST 的控制:login_required装饰器现在默认只重定向 GET 请求,POST 请求需要登录会直接返回 403(而不是重定向后丢失 POST 数据)。- 模板引擎改进:
include模板标签现在支持{% include "..." with var=value only %}这种更严格的上下文隔离方式。 Log模型新增:django.contrib.admin中新增了LogEntry模型的迁移改进,日志记录更高效。
Django 4.2 LTS(2023年4月发布,长期支持版,推荐用于生产)
这是目前大多数生产项目仍在使用的版本,关键新特性包括:
Psycopg 3支持:Python 连接 PostgreSQL 的推荐驱动升级到了psycopg(第三版),性能更好,支持异步连接。CreateModel迁移优化:大幅减少迁移文件中的冗余操作。QuerySet.iterator()改进:支持chunk_size参数控制每次读取数据库的行数,防止大查询内存溢出。GroupConcat数据库函数:MySQL/PostgreSQL 的聚合函数支持。
Django 4.1(2022年8月发布)
- 异步 ORM 初始支持:
aget()、afilter()、asave()等异步方法首次可用(但需要在同步上下文中谨慎使用)。 startproject和startapp默认使用Pathlib:路径处理从字符串切换为pathlib.Path。
安全性更新(贯穿所有版本)
Django 每个小版本都会修复安全漏洞,
- 修复了
URLValidator的域名正则表达式绕过问题(CVE-2024-xxxxx) - 修复了
FileUploadHandler的内存泄漏问题 - 增强了对
Host头攻击的防护
对你的“全栈”开发影响最大的变化:
- 前端集成更友好:5.1 的
FieldGroup和LoginRequiredMiddleware让你在使用 HTMX 或 Alpine.js 时更顺手,不再需要写大量模板逻辑和装饰器。 - 安全性要求提高:今后部署 Django 5.1 时,如果使用
LogoutView,必须把登出按钮改为<form method="post">并带 CSRF token,否则会失效。 - 数据库迁移更智能:5.0 的
db_default可以让你在数据库层面保证默认值,避免 Python 端和数据库端的不一致。
建议:
- 新项目:直接使用 Django 5.1(稳定)或等待 2(预计 2025 下半年)。
- 现有项目升级:
- 如果你还在用 2 LTS,可以计划升级到 0 或 1(需要测试异步相关代码)。
- 如果你还在用 2 LTS(已停止安全支持),必须尽快升级,否则会面临安全风险。
如果你有具体的旧代码迁移问题(比如从 3.x 升级到 5.x 遇到的 on_delete 或 urlpatterns 变化),可以继续提问,我可以帮你列出常见陷阱和修复步骤。