2021年4月6日正式發布了Django 3.2!這是一個長支持版本,至少有3年的維護期。
而上一個長支持版本Django2.2將在2022年4月結束支持。
Django 3.2支持Python 3.6, 3.7, 3.8, 3.9或者更高版本。
Django 3.2只支持MySQL 5.7,或更高版本。對於MySQL 5.6的支持在 2021年4月到期。
Django 3.2只支持PostgreSQL 9.6,或更高版本。
自動發現AppConfig
以往,大多數可插拔的app應用中,都在apps.py文件中定義了一個AppConfig類。
大多數人都不知道apps.py的功能和用法,更不知道可以在根目錄下的__init__.py
中定義一個default_app_config
變量指向AppConfig類。這個指向是一個鈎子,可以在初始化app的時候,自動調用我們定義的一些代碼。
現在,我們不需要這么麻煩了,只要你在任何應用的apps.py文件中定義了一個AppConfig類,Django會自動發現,並調用它,不需要再編寫default_app_config
變量了,它也被廢棄了。
我們也不用糾結在INSTALLED_APPS
中寫app的名字,還是AppConfig子類名了,因為兩者一樣。
自動創建的主鍵的類型發生變化
當你編寫一個模型的時候,如果你沒有定義一個帶有primary_key=True
屬性的主鍵字段,Django會幫你自動創建一個,也就是id字段。這個自動創建的字段類型可以通過 DEFAULT_AUTO_FIELD
和AppConfig.default_auto_field
屬性進行預定義。
為了向后兼容,Django3.2之前,這個自動創建的主鍵的類型,默認被設置為AutoField
,但是Django3.2之后,官方將它改為 BigAutoField
了。
為了防止過去的代碼和新版本Django之間的沖突,你可以如下顯式地設置,使其依然使用AutoField
:
全局級別配置:
DEFAULT_AUTO_FIELD = 'django.db.models.AutoField'
app級別配置:
from django.apps import AppConfig
class MyAppConfig(AppConfig):
default_auto_field = 'django.db.models.AutoField'
name = 'my_app'
模型級別指定:
from django.db import models
class MyModel(models.Model):
id = models.AutoField(primary_key=True)
函數式索引
Index()
新增 *expressions
位置參數 ,可以為表達式創建函數類型的索引。
具體方法是在模型的Meta類中添加indexes選項。
比如:
from django.db import models
from django.db.models import F, Index, Value
from django.db.models.functions import Lower, Upper
class MyModel(models.Model):
first_name = models.CharField(max_length=255)
last_name = models.CharField(max_length=255)
height = models.IntegerField()
weight = models.IntegerField()
class Meta:
indexes = [
Index(
Lower('first_name'),
Upper('last_name').desc(),
name='first_last_name_idx',
),
Index(
F('height') / (F('weight') + Value(5)),
name='calc_idx',
),
]
支持pymemcache
新的 django.core.cache.backends.memcached.PyMemcacheCache
緩存后端,支持使用 pymemcache庫。但是需要 pymemcache
3.4.0或更高版本
admin后台新增兩個裝飾器
也就是:
@display()
裝飾器:其功能和list_display
或者readonly_fields
一樣@action()
裝飾器:類似原來的actions屬性。
在某些場景下,使用裝飾器比直接使用屬性更方便。
小功能
- admin后台開始支持外觀主題
- auth的PBKDF2密碼哈希迭代次數又提高了,鹽的長度也提高到了128位
-
loaddata和dumpdata管理命令現在支持XZ和LZMA格式
-
現在不需要活動的數據庫連接,就可以執行makemigrations命令了。
-
新增
django.core.paginator.Paginator.get_elided_page_range()
方法,允許生成一個頁面范圍,其中一些值會 被省略。如果你的頁面數量比較大,那么這個方法有助於在模板中生成合理數量的頁面鏈接。 -
新增響應頭部屬性
HttpResponse.headers
,未來用於替代HttpResponse
本身。目前兩者共存,作用相同。 -
對於
SECRET_KEY
這個settings.py中最重要的安全配置,不再是第一次加載時進行檢查,而是在第一次訪問時檢查。這有助於運行一些不依賴於SECRET_KEY
的管理命令。但是在沒有提供SECRET_KEY
的情況下,調用configure()方法后,如果你發生對settings.SECRET_KEY
的訪問,將彈出ImproperlyConfigured
異常。 -
新增JSONL序列化器。用於在dumpdata和loaddata時一行一行地處理數據,而不需要一次性將所有數據整體加載。
總結
沒有什么重要的內容。版本號太激進了。