ASGI とともにデプロイするには

WSGI だけでなく、Django は非同期ウェブサーバやアプリケーションのための新しい Python 標準である ASGI でのデプロイもサポートしています。

Django の startproject 管理用コマンドは、デフォルトの ASGI 設定をセットアップします。必要に応じて、あなたのプロジェクトと ASGI 準拠の Web サーバに合わせて微調整することができます。

Django には以下の ASGI サーバのために、手引きとなるドキュメントが用意されています。

application オブジェクト

WSGI と同様に、ASGI は application という呼び出し可能オブジェクトを提供しており、アプリケーション サーバはこれを使用してあなたのコードと通信します。これは一般的に、サーバにアクセスできる Python モジュールの中で application という名前のオブジェクトとして提供されています。

startproject コマンドは、この application 呼び出し可能オブジェクトを含む <project_name>/asgi.py ファイルを生成します。

開発サーバー (runserver) では使用されませんが、開発環境と本番環境のどちらでも、任意の ASGI サーバーからも使用できます。

ASGI サーバーは通常、呼び出し可能オブジェクト application へのパスを文字列として取ります。たとえば、ほとんどの Django プロジェクトでは、myproject.asgi:application のような文字列になります。

警告

Django のデフォルトの ASGI ハンドラは全てのコードを同期スレッドで実行します が、独自の非同期ハンドラを実行する場合は、非同期安全性を意識する必要があります。

非同期コードの中で、ブロッキングな同期関数やライブラリを呼び出さないでください。Django は、非同期安全でない Django の部分でこのようなことができないようにしていますが、サードパーティのアプリや Python ライブラリではそうとは限りません。

Settings モジュールを設定する

ASGI サーバがアプリケーションをロードするとき、Django は settings モジュールをインポートする必要があります――アプリケーション全体がここで定義されます。

Django は適切な Settings モジュールを見つけるために、 DJANGO_SETTINGS_MODULE 環境変数を使用します。これは設定モジュールへのドット区切りのパスを含んでいなければなりません。開発時と実運用時で別々の値を使用することも可能です。どのように設定を組織するか次第です。

この変数が指定されていない場合、デフォルトの asgi.pymysite.settings を設定します。 mysite はプロジェクトの名前です。

ASGI ミドルウェアの適用

ASGI ミドルウェアを適用したり、他の ASGI アプリケーションに Django を組み込むには、 Django の application オブジェクトを asgi.py ファイルでラップします。例:

from some_asgi_library import AmazingMiddleware

application = AmazingMiddleware(application)
Back to Top