如何使用 WSGI 部署¶
Django 的主要部署平台是 WSGI,这是 Python 的 Web 服务器和应用程序标准。
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
可调用对象。
配置 settings 模块¶
当 WSGI 服务器加载您的应用程序时,Django 需要导入 settings 模块——这就是定义整个应用程序的地方。
Django 使用 DJANGO_SETTINGS_MODULE
环境变量来定位相应的 settings 模块。它必须包含 settings 模块的点分路径。您可以为开发和生产使用不同的值;这完全取决于您如何组织您的设置。
如果未设置此变量,则默认的 wsgi.py
将其设置为 mysite.settings
,其中 mysite
是您项目的名称。这就是 runserver
默认情况下发现默认 settings 文件的方式。
注意
由于环境变量是进程范围的,因此当您在同一进程中运行多个 Django 站点时,此方法无效。这在 mod_wsgi 中会发生。
为了避免这个问题,请使用 mod_wsgi 的守护进程模式,每个站点都在其自己的守护进程中,或者通过在 wsgi.py
中强制执行 os.environ["DJANGO_SETTINGS_MODULE"] = "mysite.settings"
来覆盖环境中的值。
应用 WSGI 中间件¶
要应用 WSGI 中间件,您可以包装 application 对象。例如,您可以在 wsgi.py
的底部添加以下几行
from helloworld.wsgi import HelloWorldApplication
application = HelloWorldApplication(application)
如果您想将 Django 应用程序与另一个框架的 WSGI 应用程序结合起来,您也可以用自定义的 WSGI 应用程序替换 Django WSGI 应用程序,该应用程序稍后会委托给 Django WSGI 应用程序。