如何使用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
信号。这可能导致空闲连接到数据库和内存缓存服务器。