Django 3.0 發布了,此版本帶來了一些新特性,其中最值得關注的應當是其開始支持非同步功能。
此前我們報導過,有草案提出要讓 Django 支持非同步。聚集於 HTTP 中間件視圖和 ORM,開發者要在 Django 中添加非同步支持,同時維護對同步 Python 的支持,並且將完全向後兼容。
該設想最終會替換掉 Django 中的大多數阻塞部分,包括 Session、Auth、ORM 與 Handlers 等,使其原生支持非同步。而同步 API 將繼續存在並得到完全支持,其中一些最終將轉變為原生非同步代碼的同步包裝器。
ASGI 模式將 Django 作為原生非同步應用程序運行,原有的 WSGI 模式將圍繞每個 Django 調用運行單個事件循環,以使非同步處理層與同步伺服器兼容。
在這個改造的過程中,每個特性都會經歷以下三個實現階段:
Django 3.0 開始提供運行 ASGI 應用支持,讓 Django 逐漸具備非同步功能。做了這一改動后,Django 現在會感知到非同步事件循環,並將阻止從非同步上下文調用標記為「非同步不安全」的代碼(例如 ORM 操作),如果開發者之前使用的是非同步代碼,則可能會觸發。如果看到 SynchronousOnlyOperation 錯誤,可以仔細檢查代碼並將資料庫操作移到同步子線程中。
其它方面,Django 現在支持 MariaDB 10.1 及更高版本;新的 ExclusionConstraint 類可以在 PostgreSQL 上添加排除約束;輸出 BooleanField 的表達式現在可以直接在 QuerySet 過濾器中使用,而無需先註解然後對註解進行過濾;自定義枚舉類型 TextChoices、IntegerChoices 和 Choices 現在可用作定義 Field.choices 的方法。
此外還有一些小改動,詳情查看更新說明:
需要注意的是,Django 3.0 支持 Python 3.6、3.7 與 3.8,Django 2.2.x 系列是最後一個支持 Python 3.5 的系列。官方同時也建議第三方應用作者放棄對 Django 2.2 之前的所有版本的支持。
[admin
]