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.py
は mysite.settings
を設定します。 mysite
はプロジェクトの名前です。
ASGI ミドルウェアの適用¶
ASGI ミドルウェアを適用したり、他の ASGI アプリケーションに Django を組み込むには、 Django の application
オブジェクトを asgi.py
ファイルでラップします。例:
from some_asgi_library import AmazingMiddleware
application = AmazingMiddleware(application)