如何使用 WSGI 进行部署 — Django 文档
如何使用 WSGI 进行部署
Django 的主要部署平台是 WSGI,这是 Web 服务器和应用程序的 Python 标准。
Django 的 :djadmin:`startproject` 管理命令为您设置了一个简单的默认 WSGI 配置,您可以根据项目的需要进行调整,并指导任何符合 WSGI 的应用程序服务器使用。
Django 提供了下面这些 WSGI 服务的入门文档:
- 如何在 Gunicorn 中使用 Django
- 如何在 uWSGI 中使用 Django
- 如何在 Apache 和
mod_wsgi
中使用 Django - 从 Apache 对 Django 的用户数据库进行身份验证
application 对象
使用 WSGI 进行部署的关键概念是 application
可调用对象,应用程序服务器使用它与您的代码进行通信。 它通常作为服务器可访问的 Python 模块中名为 application
的对象提供。
:djadmin:`startproject` 命令创建一个文件 <project_name>/wsgi.py
,其中包含这样一个 application
可调用文件。
它被 Django 的开发服务器和生产 WSGI 部署使用。
WSGI 服务器从它们的配置中获取到 application
可调用的路径。 Django 的内置服务器,即 :djadmin:`runserver` 命令,从 :setting:`WSGI_APPLICATION` 设置中读取它。 默认情况下,它设置为 <project_name>.wsgi.application
,它指向 <project_name>/wsgi.py
中可调用的 application
。
配置 settings 模块
当 WSGI 服务器加载你的应用程序时,Django 需要导入设置模块——这是你整个应用程序定义的地方。
Django 使用 DJANGO_SETTINGS_MODULE 环境变量来定位适当的设置模块。 它必须包含设置模块的虚线路径。 您可以为开发和生产使用不同的值; 这完全取决于您如何组织设置。
如果未设置此变量,则默认 wsgi.py
将其设置为 mysite.settings
,其中 mysite
是您的项目名称。 这就是 :djadmin:`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 应用或其它框架联合起来,可以用自定义 WSGI 应用替换 Django 的 WSGI 应用,前者会在稍晚时候将任务委托给 WSGI 应用。