こんにちはPyQサポートです。
8月にリリースされるDjango3.1で追加される機能についてご存知ですか?
今回はDjango最新バージョンDjango3.1の先取り情報を紹介します。
この記事ではDjango3.1でアップデートされる新機能の中から、ぜひ知ってほしい2つの機能「ViewやMiddlewareなどの非同期対応」、「JSONFieldのサポート範囲拡大」に絞ってご説明します。
より詳しく知りたい人は Django3.1リリースノートをお読みください。
リリースの概要
名称 | Django |
---|---|
リリースバージョン | Django 3.1 |
開始日 | 2020年8月予定 |
サポートしているPython | 3.6、3.7、3.8 |
ドキュメントURL | https://docs.djangoproject.com/en/3.1/releases/3.1/ |
※アップデートの際はBackwords Incompatible Changes(後方互換性のない変更)に十分注意してください
非同期でのリクエスト処理
Django3.1は以下の非同期のリクエストパスをサポートするようになります。
- 非同期View
- 非同期Middleware
- 非同期テストとテストクライアント
本アップデートの効果
Django3.0の時点で非同期対応のWebサーバー(ASGIサーバー)で動作するようになりましたが、ViewやMiddlewareなどは非同期に対応していませんでした。今回のアップグレードでこれらの非同期も対応されることになりました。
非同期化により、同じマシンで前よりも効率良く動作するプログラムを書けるようになります。
将来的にDjangoのDBドライバーが非同期対応されると、WebSocketのような非同期・双方向のプロトコルに対応したアプリケーションが効率的に動作できるようになるかもしれませんね。
ASGIサーバー
非同期処理に対応したWebアプリケーションを動作させるための、Python製のWebサーバーです。
非同期ビューを開始する方法
非同期Viewを開始するにはasync def
を使用してViewを宣言する必要があります。
async def my_view(request): await asyncio.sleep(0.5) return HttpResponse('Hello, async world!')
JSONFieldのサポート範囲拡大
リリースノートの原文には、「Django3.1には、サポートしているすべてのデータベースバックエンドで使用できるmodels.JSONField
とforms.JSONField
が含まれる。どちらのフィールドも、カスタムJSONエンコーダーとデコーダーの使用をサポートする」と書かれています。
解説
モデルフィールドは、以前はPostgreSQL
のみをサポートしていました。
モデル
Djangoでデータを扱うには、モデルを利用します。 Djangoのモデルには色々なフィールドの型が用意されています。フィールドはクラスの属性として定義されます。一般的に、各モデルは単一のデータベースのテーブルに紐付いています。モデルを利用して、テーブルからデータを読み取ります。
URL:https://docs.djangoproject.com/ja/2.0/topics/db/models/
つまり、以前はPostgreSQL
のみに対応していた便利なJSON格納機能が、他のDB(データベース)でも扱えるようになります。
オラクルDBやMariaDBでもJSONに対応すると公式で言われています。
Djangoがサポートしているデータベースの多くがJSONのサポートを開始したため、PostgreSQL以外でも利用可能となったのではないかと考えられますね。
注意点
注意点として、プロジェクトでdjango.contrib.postgres.fields.JSONField
と関連するフォームフィールドと変換を使用している場合は、新しいフィールドを使用するように調整し、データベース移行を生成して適用する必要があります。現時点では、古いフィールドと変換は新しいフィールドと変換への参照として残されており、このリリースでは非推奨になっているそうです。
まとめ
Django3.1の先取り情報を紹介しました。
View関数のAsync対応などで今後よりDjangoが非同期サポートが期待できますね。 Django開発者の方にとってもJSONFieldが広く使えるようになったのはとても嬉しいのではないでしょうか。今までサードパーティーライブラリーを導入していたのが、Django本体のみでJSONのフィールドが使えますね。