如何使用 ASGI 部署¶
除了 WSGI 之外,Django 也支援在 ASGI 上部署,這是新興的 Python 非同步網頁伺服器和應用程式標準。
Django 的 startproject
管理命令會為您設定預設的 ASGI 配置,您可以根據專案的需求進行調整,並指示任何符合 ASGI 規範的應用程式伺服器使用。
Django 包含以下 ASGI 伺服器的入門文件
application
物件¶
如同 WSGI,ASGI 也要求您提供一個 application
可呼叫物件,應用程式伺服器會使用它與您的程式碼進行通訊。它通常以名為 application
的物件形式存在於伺服器可存取的 Python 模組中。
startproject
命令會建立一個 <project_name>/asgi.py
檔案,其中包含這樣一個 application
可呼叫物件。
它不會被開發伺服器(runserver
)使用,但可以在開發或生產環境中被任何 ASGI 伺服器使用。
ASGI 伺服器通常會將應用程式可呼叫物件的路徑作為字串;對於大多數 Django 專案而言,它看起來會像 myproject.asgi:application
。
警告
雖然 Django 的預設 ASGI 處理程式將在同步執行緒中執行您的所有程式碼,但如果您選擇執行自己的非同步處理程式,則必須注意非同步安全性。
請勿在任何非同步程式碼中呼叫阻塞式同步函數或程式庫。Django 會阻止您對非同步安全的 Django 部分執行此操作,但第三方應用程式或 Python 程式庫的情況可能並非如此。
設定設定模組¶
當 ASGI 伺服器載入您的應用程式時,Django 需要匯入設定模組 — 這是定義您整個應用程式的地方。
Django 使用 DJANGO_SETTINGS_MODULE
環境變數來定位適當的設定模組。它必須包含設定模組的虛線路徑。您可以為開發和生產使用不同的值;這完全取決於您如何組織設定。
如果未設定此變數,預設的 asgi.py
會將其設定為 mysite.settings
,其中 mysite
是您的專案名稱。
應用 ASGI 中介軟體¶
若要應用 ASGI 中介軟體,或將 Django 嵌入另一個 ASGI 應用程式中,您可以在 asgi.py
檔案中包裝 Django 的 application
物件。例如
from some_asgi_library import AmazingMiddleware
application = AmazingMiddleware(application)