Django 4.0版本說明
2021年12月7日尊剔,Django正式發(fā)布了4.0版本!
這貨的版本提升速度也太快了痛单,完全名不副實嘿棘!再看看新功能,這都更新了啥桦他?
Python 依賴
Django 4.0依賴Python 3.8+蔫巩。也就是說低于這個版本的Python不行。
新功能
zoneinfo
成為默認的時區(qū)庫
Python的標(biāo)準(zhǔn)庫zoneinfo替代了過去的pytz庫快压,成為Django的默認時區(qū)庫圆仔。
Django3.2是個過渡版本,可以使用非pytz的時區(qū)庫蔫劣。
Django4.0中坪郭,zoneinfo成為默認時區(qū)庫。
Django5.0中脉幢,pytz會被移除歪沃。
zoneinfo從Python3.9開始成為內(nèi)置標(biāo)準(zhǔn)庫。如果你用的是Python3.8嫌松,安裝Django的時候沪曙,自動安裝的是 backports.zoneinfo
庫。所以萎羔,一條基本原則是:最新的Django配最新的Python液走。
從pytz
改為使用zoneinfo
,基本是透明無感的贾陷。比如當(dāng)前時區(qū)的選擇缘眶、在表單和模板中時區(qū)的轉(zhuǎn)換等等操作都不受影響。
但是髓废,如果您使用了非 UTC 時區(qū)巷懈,并使用pytz
normalize()
和localize()
API,或者對TIME_ZONE
進行了設(shè)置慌洪,那么你需要審核您的代碼顶燕,因為pytz
和zoneinfo
并不完全相同凑保。
為了給代碼審計留出時間,Django提供了一個過渡性的USE_DEPRECATED_PYTZ
設(shè)置割岛,將它設(shè)置為True愉适,表示允許pytz
在 Django4.x 版本發(fā)布周期期間繼續(xù)使用犯助。此設(shè)置將在 Django 5.0 中刪除癣漆。
此外,zoneinfo
庫的作者特意提供了一個pytz_deprecation_shim
包剂买,用戶幫助你從pytz遷移到zoneinfo惠爽。有需要的可以詳細了解一下這個包。
點評:換個時區(qū)庫就能從3升級到4瞬哼?
函數(shù)類唯一性約束
UniqueConstraint()
新增了一個*expressions
位置參數(shù)婚肆,可用于創(chuàng)建唯一性約束,在表達式上或數(shù)據(jù)庫函數(shù)上坐慰。例如:
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 算法更安全,推薦使用糟港。但是攀操,它不是默認設(shè)置,因為它需要 OpenSSL 1.1+ 依賴和更多內(nèi)存秸抚。
點評:這么細節(jié)嗎速和?
Redis緩存后端
新增內(nèi)置的django.core.cache.backends.redis.RedisCache
緩存后端,為直接使用 Redis 緩存提供了內(nèi)置支持剥汤。但是需要 redis-py 3.0.0 或更高版本颠放。
點評:這個還算有點意思
基于模板引擎的表單渲染
Forms
、Formsets
和ErrorList
現(xiàn)在使用模板引擎進行渲染以增強自定義的能力吭敢。詳見新的render()
碰凶, get_context()
方法以及 template_name
屬性。
點評:表單用得本來就不多
一些小特性
- admin后臺的導(dǎo)航側(cè)邊欄新增了快速過濾工具欄
- auth模塊的PBKDF2密碼哈希的迭代次數(shù)提高到320000
- 新增異步的緩存后端
django.core.cache.backends.base.BaseCache
省有。相應(yīng)的異步方法以a開頭痒留,比如aadd()
,aget()
,aset()
,aget_or_set()
和adelete_many()
。 - 通用視圖
DeleteView
現(xiàn)在繼承了FormMixin
類蠢沿,允許你提供一個Form
子類伸头,用于提供一些自定制,比如用于確認刪除的復(fù)選框舷蟀。同時還允許它使用django.contrib.messages.views.SuccessMessageMixin
runserver
管理命令新增--skip-checks
選項恤磷,可以跳過一些檢查過程面哼。新增
startapp --exclude
和startproject --exclude
選項,允許指定排除模板中的目錄扫步。新增
QuerySet.contains(obj)
方法魔策,用于判定查詢集中是否包含給定的對象。它會嘗試以最簡單和最快的方式執(zhí)行查詢河胎。其它更多小細節(jié)未一一列出
更多向后不兼容和廢棄功能的細節(jié)參考官方文檔闯袒,實在無法逐一列出。