Django 首要的部署平臺是WSGI,它是Python Web 服務器和應用的標準。
Django 的startproject 管理命名為你設置一個簡單的默認WSGI 配置,你可以根據你項目的需要做調整并指定任何與WSGI 兼容的應用服務器使用。
Django 包含以下WSGI 服務器的入門文檔:
使用WSGI 部署的核心概覽是application 可調用對象,應用服務器使用它來與你的代碼進行交換。在Python 模塊中,它通常一個名為application 的對象提供給服務器使用。
startproject 命令創(chuàng)建一個<project_name>/wsgi.py 文件,它就包含這樣一個application 可調用對象。
它既可用于Django 的開發(fā)服務器,也可以用于線上WSGI 的部署。
WSGI 服務器從它們的配置中獲得application 可調用對象的路徑。Django 內建的服務器,叫做runserver 和runfcgi 命令,是從WSGI_APPLICATION 設置中讀取它。默認情況下,它設置為<project_name>.wsgi.application,指向<project_name>/wsgi.py 中的application 可調用對象。
當WSGI 服務器加載你的應用時,Django 需要導入settings 模塊 —— 這里是你的全部應用定義的地方。
Django 使用DJANGO_SETTINGS_MODULE 環(huán)境變量來定位settings 模塊。它包含settings 模塊的路徑,以點分法表示。對于開發(fā)環(huán)境和線上環(huán)境,你可以使用不同的值;這完全取決于你如何組織你的settings。
如果這個變量沒有設置,默認的wsgi.py 設置為mysite.settings,其中mysite 為你的項目的名稱。這是runserver 如何找到默認的settings 文件的機制。
注
因為環(huán)境變量是進程范圍的,當你在同一個進程中運行多個Django 站點時,它將不能工作。使用
mod_wsgi就是這個情況。為了避免這個問題,可以使用mod_wsgi 的守護進程模式,讓每個站點位于它自己的守護進程中,或者在
wsgi.py中通過強制使用os.environ["DJANGO_SETTINGS_MODULE"] = "mysite.settings"來覆蓋這個值。
你可以簡單地封裝application 對象來運用 WSGI 中間件。 例如,你可以在wsgi.py 的底下添加以下這些行:
from helloworld.wsgi import HelloWorldApplication
application = HelloWorldApplication(application)
如果你結合使用 Django 的application 與另外一個WSGI application 框架,你還可以替換Django WSGI 的application 為一個自定義的WSGI application。
注
某些第三方的WSGI 中間件在處理完一個請求后不調用響應對象上的
close—— most notably Sentry’s error reporting middleware up to version 2.0.7。這些情況下,不會發(fā)送request_finished信號。這可能導致數據庫和memcache 服務的空閑連接。
譯者:Django 文檔協(xié)作翻譯小組,原文:WSGI servers。
本文以 CC BY-NC-SA 3.0 協(xié)議發(fā)布,轉載請保留作者署名和文章出處。
Django 文檔協(xié)作翻譯小組人手緊缺,有興趣的朋友可以加入我們,完全公益性質。交流群:467338606。