最近兩年,Django的版本號提高得特別快,2.0尚未多久,很快就要到3.0了。python
讓咱們先看看官方的路線圖和時間表:web
版本號 | 發佈日期 | 中止更新日期 | 中止維護日期 |
---|---|---|---|
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
再也不支持3.6如下版本,僅支持3.六、3.七、3.8或者更高版本。後端
(按照Django的一向策略,最新的Django請使用最新的python。)瀏覽器
這是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 10.1或者更高版本。
經過爲模型添加Meta.constraints
選項,能夠在PostgreSQL數據庫中添加exclusion約束。
如今能夠在QuerySet過濾操做中直接使用輸出布爾值的表達式,而不用先聚合再過濾。
新增枚舉類TextChoices
,IntegerChoices
和Choices
,它們都是Field.choices
的子類。也就是說你之後不用在CharField
中添加choices
參數了,能夠直接建立一個TextChoices
對象。
下面是一些細微的變化(省略了一些不經常使用的)
ModelAdmin.list_display
添加admin_order_field
支持ModelAdmin.get_inlines()
方法容許根據請求或模型實例指定爲inline
模式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。
新的get_session_cookie_age()
方法容許動態指定會話cookie的生存週期。
新增哈希數據庫功能MD5, SHA1, SHA224, SHA256, SHA384,和 SHA512。
添加了Sign數據庫功能。
FilePathField
如今接受可調用對象
自引用的 ManyToManyField
字段容許使用對稱的中間表
Avg
和Sum
聚合功能如今支持distinct
參數,能夠去重。
新增SmallAutoField
字段,相似AutoField
字段,區別在於前者只容許一個較小的值範圍,好比從1到32767,這樣會更安全一點。
AutoField
、BigAutoField
以及 SmallAutoField
分別繼承了IntegerField
、BigIntegerField
和SmallIntegerField
,因此其系統檢查和驗證器也相應分別繼承。
FileField.upload_to
如今支持pathlib.Path
。
CheckConstraint
在MySQL 8.0.16+上被支持。
(簡要介紹一下)
X_FRAME_OPTIONS
如今默認爲'DENY'
。SECURE_CONTENT_TYPE_NOSNIFF
如今默認爲True
。pywatchman
庫django.utils.encoding.force_text() and smart_text()
一些django.utils中的和http、translation、text等相關的內容。
如下方法、屬性和設置被刪除了:
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()
方法
staticfiles
和admin_static
模板標籤庫
django.contrib.staticfiles.templatetags.staticfiles.static()
方法
從版本說明中咱們能夠看出,Django3.0最核心的變化是支持基於ASGI的異步通訊,其它細微的改動通常用戶基本感覺不出來。
異步通訊的功能聽說是將django-channle這個外部庫歸入進來,做爲Django官方核心標準功能之一。不管如何,HTML5的websocket將能夠直接和Django進行通訊了。基於Django實現網頁聊天室、網頁QQ、網頁微信等實時通訊應用將變得簡單,咱們能夠和長短輪詢說再見了。
(更多Django相關內容和最新變化,請關注個人官網www.liujiangblog.com,相關最新教學視頻也將第一時間發佈!)