如何使用 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 應用程式。

返回頂端