Django 3.0 正式發佈,開始支持異步功能

Django 3.0 發佈了,此版本帶來了一些新特性,其中最值得關注的應當是其開始支持異步功能。數據庫

此前咱們報導過,有草案提出要讓 Django 支持異步。彙集於 HTTP 中間件視圖和 ORM,開發者要在 Django 中添加異步支持,同時維護對同步 Python 的支持,而且將徹底向後兼容。django

該設想最終會替換掉 Django 中的大多數阻塞部分,包括 Session、Auth、ORM 與 Handlers 等,使其原生支持異步。而同步 API 將繼續存在並獲得徹底支持,其中一些最終將轉變爲原生異步代碼的同步包裝器。安全

ASGI 模式將 Django 做爲原生異步應用程序運行,原有的 WSGI 模式將圍繞每一個 Django 調用運行單個事件循環,以使異步處理層與同步服務器兼容。服務器

在這個改造的過程當中,每一個特性都會經歷如下三個實現階段:異步

  • Sync-only,只支持同步,也就是當前的狀況
  • Sync-native,原生同步,同時帶有異步封裝器
  • Async-native,原生異步,同時帶同步封裝器

Django 3.0 開始提供運行 ASGI 應用支持,讓 Django 逐漸具有異步功能。作了這一改動後,Django 如今會感知到異步事件循環,並將阻止從異步上下文調用標記爲「異步不安全」的代碼(例如 ORM 操做),若是開發者以前使用的是異步代碼,則可能會觸發。若是看到 SynchronousOnlyOperation 錯誤,能夠仔細檢查代碼並將數據庫操做移到同步子線程中。async

其它方面,Django 如今支持 MariaDB 10.1 及更高版本;新的 ExclusionConstraint 類能夠在 PostgreSQL 上添加排除約束;輸出 BooleanField 的表達式如今能夠直接在 QuerySet 過濾器中使用,而無需先註解而後對註解進行過濾;自定義枚舉類型 TextChoices、IntegerChoices 和 Choices 如今可用做定義 Field.choices 的方法。.net

此外還有一些小改動,詳情查看更新說明:線程

須要注意的是,Django 3.0 支持 Python 3.六、3.7 與 3.8,Django 2.2.x 系列是最後一個支持 Python 3.5 的系列。官方同時也建議第三方應用做者放棄對 Django 2.2 以前的全部版本的支持。中間件

相關文章
相關標籤/搜索