如何使用WSGI 进行部署

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

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设置中读取它。 By default, it’s set to <project_name>.wsgi.application, which points to the application callable in <project_name>/wsgi.py.

配置设置模块

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

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

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

注意

由于环境变量是全过程的,当您在同一个进程中运行多个Django站点时,这不起作用。 这发生在mod_wsgi上。

To avoid this problem, use mod_wsgi’s daemon mode with each site in its own daemon process, or override the value from the environment by enforcing os.environ["DJANGO_SETTINGS_MODULE"] = "mysite.settings" in your wsgi.py.

应用WSGI中间件

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

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

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