Django3.0の主な変更点

django3-title CODE

2019年12月にDjango3.0がリリースされました。

Django2系からの変更点とアップデート前に知っておきたい注意点を紹介します。

Djangoの勉強にはこちらの記事を参考に

Pythonバージョン間の互換性

Django3.0からは現状でPython 3.6、3.7、3.8のみをサポートします。

Python2のサポートが2020年で切れるということなのでPython2にはもちろん対応していません。

Python3.6以前を使用しているアプリケーションはPythonのバージョンアップが必要になります。

 

Python3.5から移行を考えている方は以下をどうぞ。

What's New In Python 3.6 — Python 3.10.6 ドキュメント

 

Django3.0の追加機能

ASGI(非同期Webサーバー)対応

本アップデートで一番の目玉だと個人的に思います。

 

今までは「WSGI」での同期サーバーとして処理ができていましたが、Django3.0からは非同期対応のWebサーバーASGI」で動作するようになりました。

ASGIは非同期処理に対応したWebアプリケーションを動作させるためのPython製のWebサーバーです。

 

しかし、ASGIで通信できるようになっているものの、非同期のviewやmiddlewareの作成はまだサポートしていないようです。

つまり、現状ではあまりASGIの恩恵を受けれない。。。

 

Django×ASGIのデプロイ方法は以下を参照

https://docs.djangoproject.com/en/3.0/howto/deployment/asgi/

 

Maria DBのサポート

MariaDB(10.1以上)を公式にサポートするようになりました。

MariaDBを使う場合はDjangoの設定でMySQL用データベースバックエンドを選択してください。

 

PostgreSQL における排他制約

PostgreSQLの排他制約を作成するクラスExclusionConstraintが追加されました。

Meta.constraints オプションを用いてモデルに追加できます。

 

Filter expressions

BooleanFieldをfilterで使用する際

・3.0以前

annotateメソッドを経由する必要がある

・3.0

直接filterメソッドに使用できる

 

モデルフィールドで列挙型

TextChoicesIntegerChoicesChoicesField.choicesとして列挙型が使えるようになりました。

使い方は以下を参照

https://docs.djangoproject.com/ja/3.0/ref/models/fields/#enumeration-types

 

3.0から削除された機能

3.0から主に以下の機能が削除されました。

  • django.db.backends.postgresql_psycopg2
  • django.shortcuts.render_to_response()
  • DEFAULT_CONTENT_TYPE
  • HttpRequest.xreadlines()
  • Field.from_db_value(),Expression.convert_value()
  • QuerySet.earliest(),latest()
  • django.utils.http.cookie_date()
  • テンプレートタグのstaticfiles,admin_static
  • django.contrib.staticfiles.templatetags.staticfiles.static()