如何使用 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 应用程序。

返回顶部