12月了,Django 6.0 即將發佈。Django 這次次更新不僅強化了安全性和現代開發體驗,更引入了社區期待已久的後台任務接口。同時,Django 6.0 對 Python 版本提出了更高的要求,一起來看看。
以下是 Django 6.0 值得關注的核心變化。
原生支持內容安全策略(CSP)
Web 安全一直是 Django 的強項。在 6.0 版本中,Django 終於內置了對內容安全策略(Content Security Policy, CSP)的支持。此前,開發者通常需要依賴第三方庫(如 django-csp)來防禦跨站腳本(XSS)和內容注入攻擊,現在這一功能正式成為核心組件的一部分。
新版本引入了 ContentSecurityPolicyMiddleware 中間件,允許開發者通過 Python 字典的形式定義安全規則,配置更加直觀且類型安全:
from django.utils.csp import CSP
SECURE_CSP = {
"default-src": [CSP.SELF],
"script-src": [CSP.SELF, CSP.NONCE],
"img-src": [CSP.SELF, "https:"],
}
此外,模板系統中新增了 csp() 上下文處理器,支持生成隨機數(nonce),這使得在嚴格的安全策略下使用內聯腳本變得更加規範和安全。
內置後台任務框架(Background Tasks)
這是 Django 6.0 最具革新性的功能之一。Django 首次引入了原生的任務隊列接口 django.tasks。通過新增的 @task 裝飾器,開發者可以將發送郵件、數據處理等耗時操作移出 HTTP 請求週期,進行異步處理。
代碼示例如下:
from django.tasks import task
@task
def email_users(emails, subject, message):
# 郵件發送邏輯
pass
# 將任務推入隊列
email_users.enqueue(
emails=["user@example.com"],
subject="系統通知",
message="內容詳情"
)
需要注意的是,Django 目前提供的內置後端主要用於開發和測試。在生產環境中,該框架旨在提供一套標準化的 API 接口,具體的任務執行(Worker)仍需對接外部的基礎設施。這一舉措統一了 Django 生態中的任務調用方式,降低了不同任務隊列庫之間的遷移成本。
模板局部片段(Template Partials)
為了適應現代前端組件化的開發模式,Django 模板語言(DTL)新增了「局部片段」支持。通過 {% partialdef %} 和 {% partial %} 標籤,開發者可以在同一個模板文件中定義可重用的 HTML 片段,而無需將它們拆分為大量細碎的獨立文件。
這一特性極大地簡化了模板結構,特別是在配合 HTMX 等技術進行局部頁面刷新時,能夠顯著提升開發效率和代碼的可維護性。
郵件與數據庫的現代化升級
- 全面採用現代 Python Email API:郵件模塊底層徹底重構,摒棄了舊版的
Compat32API,全面轉向 Python 3.6+ 引入的email.message.EmailMessage。新實現對 Unicode 的支持更加友好,API 調用也更為簡潔。 - 數據庫功能增強:
StringAgg聚合函數不再僅限於 PostgreSQL,現已成為通用功能。此外,QuerySet.raw()開始支持複合主鍵模型,PostgreSQL 後端則新增了Lexeme表達式以增強全文搜索控制。
移除的功能與破壞性變更
為了保持框架的輕量與規範,Django 6.0 移除了一批過時特性,升級時需特別留意。
- 數據庫支持縮減:停止支持 MariaDB 10.5,並移除了對
cx_Oracle驅動的支持。 - 強制關鍵字參數:為了提高代碼可讀性,
Model.save()、Model.asave()以及BaseConstraint等核心方法不再支持位置參數(Positional Arguments),調用時必須顯式使用關鍵字參數。 - 默認協議變更:
forms.URLField的默認協議從 "http" 變更為 "https"。 - 其他清理:移除了
django.utils.itercompat模塊及 GeoIP2 的部分舊方法。
Python 版本的硬性要求
Django 6.0 放棄了對舊版 Python 的支持。新版本僅支持 Python 3.12以及上的版本,如果是仍在使用 Python 3.10 或 3.11 的項目,若想升級至 Django 6.0,必須先升級基礎解釋器。
此外,新創建項目的 DEFAULT_AUTO_FIELD 將默認設置為 BigAutoField,以適應大數據量下的主鍵需求。
如何解決 Python 版本升級的陣痛?
Django 6.0 對 Python 3.12+ 的強制要求,給維護舊項目的團隊帶來了環境管理的挑戰。在實際開發中,開發者往往需要在維護運行 Python 2.7 或 3.8 的老舊系統的同時,嚐鮮體驗 Django 6.0 及其依賴的 Python 3.14 環境。本地安裝多個 Python 版本並進行切換,不僅配置繁瑣,還容易導致依賴衝突。
那就不得不介紹ServBay了,這是一款專為開發者設計的環境管理工具。
- 一鍵部署:無需複雜的編譯和配置,即可快速安裝最新的 Python 環境。
- 全版本覆蓋:支持從 Python 2.7 到主流的 3.5 - 3.11,並緊跟前沿支持到了 Python 3.14。
- 環境隔離:允許多個 Python 版本同時運行。開發者可以為 Django 6.0 的新項目指定 Python 3.14,同時為維護中的老項目保留 Python 3.8,互不干擾。
對於希望快速體驗 Django 6.0 新特性,或者需要平滑遷移舊項目的開發者而言,ServBay 能夠顯著降低環境搭建的時間成本,讓開發工作迴歸代碼本身。