如何使用 WSGI 部署¶
Django 的主要部署平台是 WSGI,這是 Python 中網頁伺服器和應用程式的標準。
Django 的 startproject
管理命令會為您設定最基本的預設 WSGI 配置,您可以根據專案的需求調整,並指示任何符合 WSGI 標準的應用程式伺服器使用。
Django 包含以下 WSGI 伺服器的入門文件
application
物件¶
使用 WSGI 部署的關鍵概念是 application
可呼叫物件,應用程式伺服器使用它與您的程式碼進行通訊。它通常以名為 application
的物件形式提供在伺服器可存取的 Python 模組中。
startproject
命令會建立一個檔案 <project_name>/wsgi.py
,其中包含這樣的 application
可呼叫物件。
Django 的開發伺服器和生產 WSGI 部署都會使用它。
WSGI 伺服器會從其配置中取得 application
可呼叫物件的路徑。Django 的內建伺服器,也就是 runserver
命令,會從 WSGI_APPLICATION
設定中讀取它。預設情況下,它會設定為 <project_name>.wsgi.application
,這會指向 <project_name>/wsgi.py
中的 application
可呼叫物件。
設定設定模組¶
當 WSGI 伺服器載入您的應用程式時,Django 需要匯入設定模組 — 這是定義整個應用程式的地方。
Django 使用 DJANGO_SETTINGS_MODULE
環境變數來定位適當的設定模組。它必須包含設定模組的點狀路徑。您可以為開發和生產使用不同的值;這完全取決於您如何組織設定。
如果未設定此變數,則預設的 wsgi.py
會將其設定為 mysite.settings
,其中 mysite
是您專案的名稱。這就是 runserver
預設情況下會發現預設設定檔案的方式。
注意
由於環境變數是全程序的,因此當您在同一個程序中執行多個 Django 網站時,這將無法運作。mod_wsgi 會發生這種情況。
為避免此問題,請使用 mod_wsgi 的守護進程模式,讓每個網站都在自己的守護進程中,或透過在您的 wsgi.py
中強制執行 os.environ["DJANGO_SETTINGS_MODULE"] = "mysite.settings"
來覆寫環境中的值。
套用 WSGI 中介軟體¶
若要套用 WSGI 中介軟體,您可以包裝應用程式物件。例如,您可以將這些程式碼行新增至 wsgi.py
的底部
from helloworld.wsgi import HelloWorldApplication
application = HelloWorldApplication(application)
如果您想將 Django 應用程式與另一個框架的 WSGI 應用程式結合,您也可以將 Django WSGI 應用程式替換為稍後委派給 Django WSGI 應用程式的自訂 WSGI 應用程式。