Django3.2 新特性


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_FIELDAppConfig.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時一行一行地處理數據,而不需要一次性將所有數據整體加載。

總結

沒有什么重要的內容。版本號太激進了。


免責聲明!

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



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