Django 3.1版本正式發(fā)布,主要變化有哪些?
Django 3.1版本已于8月4日正式發(fā)布了,里面又有不少激動人心的變化,讓Django變得更強大了。小編我今天就帶大家看看有哪些主要變化吧?

Python版本兼容性
Django 3.1支持Python 3.6, 3.7和3.8版本。官網(wǎng)建議更新到最新版本。
對異步請求視圖和中間件的支持
從3.1起,Django將提供支持完整的異步請求(request),包括:
Asynchronous views?(異步視圖)
Asynchronous middleware (異步中間件)
Asynchronous tests and test client (異步測試和測試客戶端)
如果你希望使用異步視圖,需要先使用?async?def聲明,如下所示:
async def my_view(request):await asyncio.sleep(0.5)return HttpResponse('Hello, async world!')
無論你是在 WSGI 或 ASGI 模式下運行,Django都支持所有異步功能,不過在 WSGI 模式下使用異步代碼將會有些性能上的損失。
你還可以隨意混合使用異步和同步視圖,中間件和測試。異步功能不會影響同步代碼的執(zhí)行速度,也不會對已有項目產(chǎn)生明顯的影響。
Django的ORM,緩存層和其他長時間運行網(wǎng)絡(luò)調(diào)用的代碼尚不支持異步訪問。我們希望在即將發(fā)布的版本中增加對它們的支持。異步視圖是理想的選擇,但是,如果您在視圖內(nèi)進行大量的API或HTTP調(diào)用,則現(xiàn)在可以本地并行執(zhí)行所有這些HTTP調(diào)用,以大大加快視圖的執(zhí)行速度。
小編注:一般建議使用同步視圖函數(shù),只有在有需要的情況下使用異步視圖。小編后面會分享具體案例,歡迎關(guān)注。
新增JSONField,支持更多數(shù)據(jù)庫作為后端
Django現(xiàn)在新增models.JSONField,?forms.JSONField并且支持在更多數(shù)據(jù)庫上運行。這兩個字段都支持使用自定義JSON編碼器和解碼器。以前json格式的數(shù)據(jù)僅適用于PostgreSQL數(shù)據(jù)庫。
存儲的json格式的數(shù)據(jù)可以使用Django的ORM語法進行鏈?zhǔn)讲樵?,如下所示?br>
from django.db import modelsclass ContactInfo(models.Model):data = models.JSONField()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()
全面轉(zhuǎn)向pathlib
從3.1后,Django將廣泛使用pathlib來處理文件路徑,而不是os.path模塊。settings.py中使用startproject命令生成的根目錄將使用?pathlib.Path。STATICFILES_DIRS和FileSystemStorage也將支持pathlib.Path。
國際化
從3.1后,模板中負(fù)責(zé)標(biāo)記需要翻譯字符串的標(biāo)簽{% trans %}和{% blocktrans %}將分別被更名為{%?translate?%}和{% blocktranslate %}。不過短期內(nèi)較早的trans?和blocktrans模板標(biāo)簽依然可以使用。
<title>{% translate "This is the title." %}title><title>{% translate myvar %}title>{% blocktranslate %}This string will have {{ value }} inside.{% endblocktranslate %}
其它小變化
Django admin新增空白過濾器django.contrib.admin.EmptyFieldListFilter,并在大屏幕上多了側(cè)邊導(dǎo)航
settings.py新增PASSWORD_RESET_TIMEOUT?選項,可以密碼重置鏈接有效期(以秒計算),將替代PASSWORD_RESET_TIMEOUT_DAYS
django.contrib.humanize模塊intword可以支持負(fù)數(shù)
AbstractUser的first_name的最大長度由30變到150個字符
Django 3.1的變化,你最喜歡哪個呢??
