Django3.0 前瞻 支持異步通訊

最近兩年,Django的版本號提高得特別快,2.0尚未多久,很快就要到3.0了。python

讓咱們先看看官方的路線圖和時間表:web

1

版本號 發佈日期 中止更新日期 中止維護日期
3.0 2019-12 2020-08 2021-04
3.1 2020-08 2021-04 2021-12
3.2 LTS 2021-04 2021-12 2024-04

能夠看到2019年12月即將發佈3.0,2022年升級爲4.0,但咱們感受2.2還在昨天。sql

這給廣大的使用者和學習者帶來了必定的學習壓力和升級成本,但同時也表明Django的生態圈很是健康,使用者穩步上升,功能迭代迅速,是一種好的現象,咱們要積極擁抱變化,拒絕落後。數據庫

接下來,讓咱們看看3.0究竟有哪些新東西和新變化。django

Python兼容性

再也不支持3.6如下版本,僅支持3.六、3.七、3.8或者更高版本。後端

(按照Django的一向策略,最新的Django請使用最新的python。)瀏覽器

ASGI

這是Django3.0最大的變化和提高!安全

經過支持ASGI,Django3.0開始具有全雙工的異步通訊能力,解決其最大的短板,再也不被人詬病!(Tornado的支持者拿這個說事已經不是一天兩天了)服務器

支持ASGI並非取代現有的WSGI,而是一種補充,也就是說咱們如今有兩種服務器運行模式了。微信

要注意的是,只有在啓動了基於ASGI的服務器以後,才支持異步通訊功能。在ASGI模式下,同時支持異步和同步通訊。(WSGI模式下只能同步通訊)

Django官方提供了一份部署ASGI的文檔https://docs.djangoproject.com/en/3.0/howto/deployment/asgi/,值得學習一下。

ASGI的引入也帶來了一些須要注意的事項:Django如今會監視異步事件循環,並阻止你從異步上下文中調用被標記爲異步不安全的代碼,好比ORM操做(注意,這不是說ORM不能用了)。若是你遇到SynchronousOnlyOperation錯誤,請仔細檢查代碼並將全部數據庫操做移至同步子線程中。

MariaDB

支持MariaDB 10.1或者更高版本。

PostgreSQL

經過爲模型添加Meta.constraints 選項,能夠在PostgreSQL數據庫中添加exclusion約束。

過濾表達式

如今能夠在QuerySet過濾操做中直接使用輸出布爾值的表達式,而不用先聚合再過濾。

模型字段可選項的枚舉

新增枚舉類TextChoicesIntegerChoicesChoices ,它們都是Field.choices的子類。也就是說你之後不用在CharField中添加choices參數了,能夠直接建立一個TextChoices對象。

小功能

下面是一些細微的變化(省略了一些不經常使用的)

django.contrib.admin

  • ModelAdmin.list_display添加admin_order_field支持
  • ModelAdmin.get_inlines()方法容許根據請求或模型實例指定爲inline模式
  • Select2庫從4.0.3版本升級到4.0.7
  • jQuery從3.3.1版本升級到3.4.1

django.contrib.auth

  • PasswordResetConfirmView能夠增長新的reset_url_token屬性

  • 新增BaseBackend類,以簡化認證後端的自定義。

  • 新增get_user_permissions()方法,以鏡像現有的get_group_permissions()方法。

  • 爲HTML頁面中的用戶名、電子郵件和密碼字段的小部件中添加了autocomplete屬性,以更好地與瀏覽器器進行交互。

  • 當執行createsuperuser 命令時,若是在非交互模式下未提供相應的命令行參數,將退回到密碼和必填字段的環境變量。

  • ManyToManyField如今可使用REQUIRED_FIELDS

  • 新的UserManager.with_perm()方法將返回具備指定權限的用戶。

  • PBKDF2密碼哈希器的默認迭代計數從150,000增長到180,000。

django.contrib.sessions

新的get_session_cookie_age() 方法容許動態指定會話cookie的生存週期。

Models

  • 新增哈希數據庫功能MD5, SHA1, SHA224, SHA256, SHA384,和 SHA512。

  • 添加了Sign數據庫功能。

  • FilePathField如今接受可調用對象

  • 自引用的 ManyToManyField字段容許使用對稱的中間表

  • AvgSum聚合功能如今支持distinct參數,能夠去重。

  • 新增SmallAutoField字段,相似AutoField字段,區別在於前者只容許一個較小的值範圍,好比從1到32767,這樣會更安全一點。

  • AutoFieldBigAutoField以及 SmallAutoField分別繼承了IntegerFieldBigIntegerFieldSmallIntegerField,因此其系統檢查和驗證器也相應分別繼承。

  • FileField.upload_to如今支持pathlib.Path

  • CheckConstraint 在MySQL 8.0.16+上被支持。

Django3.0 向後不兼容

(簡要介紹一下)

  • 再也不支持9.5如下的PostgreSQL
  • 再也不支持12.2如下的Oracle
  • 正式刪除Python 2兼容性相關的API
  • 某些安全設置如今具備更安全的默認值:X_FRAME_OPTIONS如今默認爲'DENY'SECURE_CONTENT_TYPE_NOSNIFF如今默認爲True
  • 再也不支持1.2.0如下的pywatchman

Django3.0中廢棄的一些功能

django.utils.encoding.force_text() and smart_text()

一些django.utils中的和http、translation、text等相關的內容。

Django 3.0中刪除的功能

如下方法、屬性和設置被刪除了:

  • django.db.backends.postgresql_psycopg2模塊

  • django.shortcuts.render_to_response() 方法

  • DEFAULT_CONTENT_TYPE設置

  • HttpRequest.xreadlines() 方法

  • Field.from_db_value()Expression.convert_value()方法

  • QuerySet.earliest()latest()field_name關鍵字參數

  • django.utils.http.cookie_date() 方法

  • staticfilesadmin_static模板標籤庫

  • django.contrib.staticfiles.templatetags.staticfiles.static() 方法

總結

從版本說明中咱們能夠看出,Django3.0最核心的變化是支持基於ASGI的異步通訊,其它細微的改動通常用戶基本感覺不出來。

異步通訊的功能聽說是將django-channle這個外部庫歸入進來,做爲Django官方核心標準功能之一。不管如何,HTML5的websocket將能夠直接和Django進行通訊了。基於Django實現網頁聊天室、網頁QQ、網頁微信等實時通訊應用將變得簡單,咱們能夠和長短輪詢說再見了。

(更多Django相關內容和最新變化,請關注個人官網www.liujiangblog.com,相關最新教學視頻也將第一時間發佈!)

相關文章
相關標籤/搜索