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