Django4.0搶先看,結果令人失望


Django 4.0版本說明

2021年12月7日,Django正式發布了4.0版本!

這貨的版本提升速度也太快了,完全名不副實!再看看新功能,這都更新了啥?

Python 依賴

Django 4.0依賴Python 3.8+。也就是說低於這個版本的Python不行。

新功能

zoneinfo 成為默認的時區庫

Python的標准庫zoneinfo替代了過去的pytz庫,成為Django的默認時區庫。

Django3.2是個過渡版本,可以使用非pytz的時區庫。

Django4.0中,zoneinfo成為默認時區庫。

Django5.0中,pytz會被移除。

zoneinfo從Python3.9開始成為內置標准庫。如果你用的是Python3.8,安裝Django的時候,自動安裝的是 backports.zoneinfo 庫。所以,一條基本原則是:最新的Django配最新的Python。

pytz改為使用zoneinfo,基本是透明無感的。比如當前時區的選擇、在表單和模板中時區的轉換等等操作都不受影響。

但是,如果您使用了非 UTC 時區,並使用pytz normalize()localize()API,或者對TIME_ZONE進行了設置,那么你需要審核您的代碼,因為pytzzoneinfo並不完全相同。

為了給代碼審計留出時間,Django提供了一個過渡性的USE_DEPRECATED_PYTZ 設置,將它設置為True,表示允許pytz在 Django4.x 版本發布周期期間繼續使用。此設置將在 Django 5.0 中刪除。

此外,zoneinfo 庫的作者特意提供了一個pytz_deprecation_shim包,用戶幫助你從pytz遷移到zoneinfo。有需要的可以詳細了解一下這個包。

點評:換個時區庫就能從3升級到4?

函數類唯一性約束

UniqueConstraint() 新增了一個*expressions位置參數,可用於創建唯一性約束,在表達式上或數據庫函數上。例如:

from django.db import models
from django.db.models import UniqueConstraint
from django.db.models.functions import Lower


class MyModel(models.Model):
    first_name = models.CharField(max_length=255)
    last_name = models.CharField(max_length=255)

    class Meta:
        constraints = [
            UniqueConstraint(
                Lower('first_name'),
                Lower('last_name').desc(),
                name='first_last_name_unique',
            ),
        ]

使用模型的Meta.constraints選項將功能唯一性約束添加到模型中 。

點評:你有多大概率用上這個新特性?或者,你明白它的用法了嗎?

scrypt 密碼哈希算法

新的scrypt 密碼哈希算法比 PBKDF2 算法更安全,推薦使用。但是,它不是默認設置,因為它需要 OpenSSL 1.1+ 依賴和更多內存。

點評:這么細節嗎?

Redis緩存后端

新增內置的django.core.cache.backends.redis.RedisCache緩存后端,為直接使用 Redis 緩存提供了內置支持。但是需要 redis-py 3.0.0 或更高版本。

點評:這個還算有點意思

基於模板引擎的表單渲染

FormsFormsetsErrorList現在使用模板引擎進行渲染以增強自定義的能力。詳見新的render()get_context()方法以及 template_name屬性。

點評:表單用得本來就不多

一些小特性

  • admin后台的導航側邊欄新增了快速過濾工具欄
  • auth模塊的PBKDF2密碼哈希的迭代次數提高到320000
  • 新增異步的緩存后端django.core.cache.backends.base.BaseCache 。相應的異步方法以a開頭,比如aadd(), aget(), aset(), aget_or_set()adelete_many()
  • 通用視圖DeleteView 現在繼承了 FormMixin類,允許你提供一個Form子類,用於提供一些自定制,比如用於確認刪除的復選框。同時還允許它使用 django.contrib.messages.views.SuccessMessageMixin
  • runserver管理命令新增 --skip-checks選項,可以跳過一些檢查過程。

  • 新增 startapp --excludestartproject --exclude 選項,允許指定排除模板中的目錄。

  • 新增QuerySet.contains(obj)方法,用於判定查詢集中是否包含給定的對象。它會嘗試以最簡單和最快的方式執行查詢。

  • 其它更多小細節未一一列出

更多向后不兼容和廢棄功能的細節參考官方文檔,實在無法逐一列出。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM