Skip to main content

如何使用WSGI进行部署

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

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

Django包括以下WSGI服务器的入门文档:

application 对象

使用WSGI部署的关键概念是应用程序服务器用于与代码通信的 application 可调用。它通常在服务器可访问的Python模块中作为名为 application 的对象提供。

startproject 命令创建包含这样的 application 可调用的文件 <project_name>/wsgi.py

它被Django的开发服务器和生产WSGI部署使用。

WSGI服务器从其配置中获取 application 可调用的路径。 Django的内置服务器,即 runserver 命令,从 WSGI_APPLICATION 设置读取它。默认情况下,它设置为 <project_name>.wsgi.application,它指向 <project_name>/wsgi.py 中的 application 可调用。

配置设置模块

当WSGI服务器加载您的应用程序时,Django需要导入设置模块 - 这是您的整个应用程序的定义。

Django使用 DJANGO_SETTINGS_MODULE 环境变量来定位相应的设置模块。它必须包含设置模块的虚线路径。您可以为开发和生产使用不同的值;这一切都取决于你如何组织您的设置。

如果未设置此变量,则默认 wsgi.py 将其设置为 mysite.settings,其中 mysite 是项目的名称。这就是 runserver 默认情况下发现默认设置文件的方式。

注解

由于环境变量是进程范围的,当在同一进程中运行多个Django站点时,这不会工作。这发生在mod_wsgi。

要避免此问题,请在每个站点都在其自己的守护进程中使用mod_wsgi的守护程序模式,或者通过在 wsgi.py 中强制实施 os.environ["DJANGO_SETTINGS_MODULE"] = "mysite.settings" 来覆盖环境中的值。

应用WSGI中间件

要应用 WSGI middleware,您可以简单地包装应用程序对象。例如,您可以在 wsgi.py 的底部添加这些行:

from helloworld.wsgi import HelloWorldApplication
application = HelloWorldApplication(application)

如果要将Django应用程序与另一个框架的WSGI应用程序组合,您还可以使用稍后委派给Django WSGI应用程序的自定义WSGI应用程序替换Django WSGI应用程序。

注解

某些第三方WSGI中间件在处理请求后不会在响应对象上调用 close。在这些情况下,不发送 request_finished 信号。这可能导致空闲连接到数据库和内存缓存服务器。