Django3.1 版本說明


Django 3.1 於2020年8月4日發布,支持Python 3.6、3.7、3.8或更高版本。

支持異步視圖和中間件

從3.1開始,Django支持請求過程的全異步,包括:

  • 異步的視圖
  • 異步的中間件
  • 異步的測試和客戶端

要編寫一個異步視圖很簡單,只需要用async關鍵字:

import datetime
from django.http import HttpResponse

async def current_datetime(request):
    now = datetime.datetime.now()
    html = '<html><body>It is now %s. from https://www.liujiangblog.com</body></html>' % now
    return HttpResponse(html)

或者如下面的例子:

async def my_view(request):
    await asyncio.sleep(0.5)
    return HttpResponse('Hello, async world!')

注意:

  • 異步功能同時支持WSGI和ASGI模式

  • 在WSGI模式下,使用異步功能會有性能損失

  • 可以混用異步/同步視圖或中間件,Django會自動處理其中的上下文

  • 建議主要使用同步模式,在有需求的場景才使用異步功能。

  • Django的ORM系統、緩存層和其它的一些需要進行長時間網絡/IO調用的代碼依然不支持異步訪問,在未來的版本中將逐步支持。

  • 異步功能不會影響同步代碼的執行速度,也不會對已有項目產生明顯的影響。

新增JSONField類型

Django3.1新增了models.JSONFieldforms.JSONField兩種字段類型,也就是字面上的JSON數據類型,可用於所有支持的數據庫后端,並且可以自定義編碼器和解碼器。

class ContactInfo(models.Model):
    data = models.JSONField()

# ORM的API范例
ContactInfo.objects.create(data={
    'name': 'John',
    'cities': ['London', 'Cambridge'],
    'pets': {'dogs': ['Rufus', 'Meg']},
})
ContactInfo.objects.filter(
    data__name='John',
    data__pets__has_key='dogs',
    data__cities__contains='London',
).delete()

這個字段類型支持一些先前只有PostgresSQL支持的高級查詢用法,如上例所示。

first_name長度增加

auth框架中AbstractUser模型的first_name字段最大長度增至150。Django為此特別增加了一個遷移文件。

如果你現有的項目中繼承了這個模型,那么當你從舊的Django版本升級到3.1,你需要手動生成遷移文件並執行遷移操作。

如果你依然想保持長度為30的限制,可以自定義表單。

首先繼承原有表單,並重寫first_name字段。

from django import forms
from django.contrib.auth.forms import UserChangeForm

class MyUserChangeForm(UserChangeForm):
    first_name = forms.CharField(max_length=30, required=False)

在需要輸入first_name的頁面處使用MyUserChangeForm,比如admin的頁面:

from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.models import User

class MyUserAdmin(UserAdmin):
    form = MyUserChangeForm

admin.site.unregister(User)
admin.site.register(User, MyUserAdmin)

一些小改動

  • admin中新增django.contrib.admin.EmptyFieldListFilter過濾器用於對空的字段進行過濾
  • auth中PBKDF2 算法的迭代次數從180000增加到216000
  • auth中新增 PASSWORD_RESET_TIMEOUT配置項,用於自定義密碼重置鏈接的生存周期秒數,用以替代即將在Django4.0中廢棄的PASSWORD_RESET_TIMEOUT_DAYS配置項。
  • auth中很多地方開始使用SHA-256算法
  • django.contrib.humanize人性化中的intword模板過濾器現在支持負整數
  • STATICFILES_DIRSEMAIL_FILE_PATH配置項現在支持pathlib.Path
  • django.forms.DateTimeField現在支持新的時間格式,例如 2019-10-10T06:472019-10-10T06:47:23+04:00或者2019-10-10T06:47:23Z
  • 現在,如果ALLOW_HOSTS列表為空並且DEBUG=True,那么localhost的子域名可用,例如static.localhost
  • include模板標簽現在可以迭代模板名
  • admin后台界面不再支持舊的IE瀏覽器
  • MariaDB最低需求10.2版本


免責聲明!

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



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