Django3.バージョン1の説明

3746 ワード

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 = 'It is now %s. from https://www.liujiangblog.com' % now
        return HttpResponse(html)
    

    または次の例を示します.
    async def my_view(request):
        await asyncio.sleep(0.5)
        return HttpResponse('Hello, async world!')
    

    注意:
  • 非同期機能WSDiとASGIモード
  • を同時にサポート
  • WSGIモードでは、非同期機能を使用するとパフォーマンスが損なわれる
  • は非同期/同期ビューまたはミドルウェアを混用することができ、Djangoはコンテキスト
  • を自動的に処理する.
  • では、同期モードを主に使用することを推奨し、必要なシーンでは非同期機能を使用します.
  • DjangoのORMシステム、キャッシュレイヤ、およびその他の長時間ネットワーク/IO呼び出しを必要とするコードは、依然として非同期アクセスをサポートしておらず、将来のバージョンでは徐々にサポートされます.
  • 非同期機能は、同期コードの実行速度に影響を及ぼさず、既存のプロジェクトにも明らかな影響を及ぼさない.

  • JSOnFieldタイプを追加


    Django3.1 models.JSONFieldforms.JSONFieldの2つのフィールドタイプ、すなわち文字通り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を入力する必要があるページでは、adminなどのMyUserChangeFormを使用します.
    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.EmptyFiledListFilterは、空のフィールドをフィルタするための
  • である.
  • authにおけるPBKDF 2アルゴリズムの反復回数は180000から216000
  • に増加した.
  • authには、Django 4の代わりに、パスワードリセットリンクの生存期間秒数をカスタマイズするためのPASSWORD_RESET_TIMEOUTの構成項目が追加されました.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: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バージョン