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.JSONField 和forms.JSONField兩種欄位型別,也就是字面上的JSON資料型別,可用于所有支持的資料庫后端,并且可以自定義編碼器和解碼器,
class ContactInfo(models.Model):
data = https://www.cnblogs.com/django-dev/p/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_DIRS和EMAIL_FILE_PATH配置項現在支持pathlib.Path庫django.forms.DateTimeField現在支持新的時間格式,例如2019-10-10T06:47、2019-10-10T06:47:23+04:00或者2019-10-10T06:47:23Z- 現在,如果
ALLOW_HOSTS串列為空并且DEBUG=True,那么localhost的子域名可用,例如static.localhost include模板標簽現在可以迭代模板名- admin后臺界面不再支持舊的IE瀏覽器
- MariaDB最低需求10.2版本
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/59856.html
標籤:Python
下一篇:763劃分字母區間
