何が新しいのジャンゴ3.1


Django 3.1は2020年8月初めにリリースされ、非同期ビューとミドルウェアのサポート、非同期テスト、すべてのサポートされているデータベースバックエンド(PostgreSQLだけではなく)、更新管理ページのJSONフィールドを含むいくつかの主要な新機能と多くのマイナーな改良が付属します.SECURE_REFERRER_POLICY , そして、ずっと.The official release notes 標準的なリファレンスですが、このポストは、アップグレードのためのヒントと同様にハイライトのいくつかをカバーします.

ハウツーとスタイル


あなたは本当に両方のdjangoとpythonの最新バージョンになるように努力する必要があります.これは、より速く、よりサポートされ、機能を積んだコードになります.アップグレードするには、新しい仮想環境を作成し、django 3.1をインストールし、テストスイートを実行します(はい、1つはありますか?)加えることによって-Wa 完全な除数警告を表示するフラグ.
(env) $ python -Wa manage.py test
あなたのプロジェクトでまだテストを持っていない場合は、まだ使用することができますpython -Wa manage.py runserver 警告を見る.参照official upgrade list もっとアドバイスを.
JJamo 3.1はPython 3.6、3.7、または3.8を必要とします.サポートされているPythonバージョンについては、Django prerequisites page . あなたがdjangoのバージョンとリリース方針に興味があるならばdownload page サポートされているバージョンのタイムラインと将来のLTS(長期サポート)リリースを示します.
更なる文脈のために、Djangoフェローカールトンギブソンによって主催されるDjangoチャットPodcastDjango Versions and Django Security Releases .

非同期ビュー、ミドルウェア、テスト


バージョン3.0では、django本格的に非同期の旅を始めたASGI サポート.3.1では、Djangoは現在、ビュー、ミドルウェア、およびテスト/テストクライアントと完全にasyicallyリクエストパスをサポートしています.
docsで提供された基本的な例は、半秒待ってからレスポンスを返すリクエストを行うことです.
# views.py
async def my_view(request):
    await asyncio.sleep(0.5)
    return HttpResponse('Hello, async world!')
これは、WSGIまたはASGI モードは、最初に3.0で追加されました.
より適切な例は、DjangoでURLを非同期で取得することですHTTPX , 人気の次世代バージョンrequests 図書館.

クロスdb


( Jsonfieldのサポート)models and forms 現在、すべてのdjangoサポートされてバックエンド︵Mariadb、MySQL、Oracle、およびSQLite︶だけでなく、PostgreSQLに拡張されました.これは完全なサポートを提供しますJSONField queries .
# models.py
from django.db import models 

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

SoccerInfo.objects.create(data={
    'team': 'Liverpool FC',
    'coaches': ['Klopp', 'Krawietz'],
    'players': {'forwards': ['Salah', 'Firmino', 'Mané']},
})
SoccerInfo.objects.filter(
    data__team='Liverpool',
    data__coaches__contains='Klopp',
    data__players__has_key='forwards',
).delete()

管理レイアウト


管理者は、現在大きなスクリーンでより簡単な釘打ちのために左側にサイドバーを持ちます.歴史的なパン粉パターンはまだ利用可能です.新しいサイドバーを無効にしたい場合はAdminSite.enable_nav_sidebar to False .
以下は古い管理ビューです.

そしてここでサイドバーとの新しい管理ビューがあります.

パスリブ


ジャンゴは使用から切り替えたos.path より現代的で簡潔にpathlib . を使用して新しいプロジェクトを作成する場合startproject コマンド、自動的に生成settings.py 現在デフォルトpathlib .
ここでは、ジャンゴ3.0バージョンです.
# settings.py
import os

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}
そして、ここに新しいJJango 3.1バージョンがあります.
# settings.py
from pathlib import Path

BASE_DIR = Path(__file__).resolve(strict=True).parent.parent

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

ポリシー


The SECURE_REFERRER_POLICY デフォルトでは'同じ起源'になります.これは、ジャンゴチームがセキュリティを回避する多くのステップの一つです.することができます-とする必要がありますDjango deployment checklist プロジェクトを確実にするには、次のようにします.python manage.py check --deploy .

結論


多くの新機能は、広範囲に記載されているofficial release notes , これは十分にだけでなく、付属のdjango 3.1ドキュメントで読む価値があります.
すべての主要な新しいdjangoリリースはチーム努力です、そして、3.1は例外でありません.そして、リリースプロセスがスムーズに、そして、時間に確実にするために、大量の仕事のために共鳴します.特別な感謝は、async機能に関する彼の仕事とクロスdB Jsonfieldsを加えることのためです.
あなたがDjangoの継続的な発展を支持したいならばofficial fundraising page または、aになることによってGitHub Sponsor .