如何使用 WSGI 进行部署 — Django 文档

来自菜鸟教程
Django/docs/2.2.x/howto/deployment/wsgi/index
跳转至:导航、​搜索

如何使用 WSGI 进行部署

Django 的主要部署平台是 WSGI,这是 Web 服务器和应用程序的 Python 标准。

Django 的 :djadmin:`startproject` 管理命令为您设置了一个简单的默认 WSGI 配置,您可以根据项目的需要进行调整,并指导任何符合 WSGI 的应用程序服务器使用。

Django 提供了下面这些 WSGI 服务的入门文档:

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 应用。