Как развертывать с помощью WSGI¶
Основной платформой для развертывания Django является WSGI, стандарт 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
. По умолчанию он установлен в <project_name>.wsgi.application
, который указывает на вызываемую переменную application
в <project_name>/wsgi.py
.
Конфигурирование модуля настроек¶
Когда сервер WSGI загружает ваше приложение, Django должен импортировать модуль настроек - именно там определено все ваше приложение.
Django использует переменную окружения DJANGO_SETTINGS_MODULE
для поиска соответствующего модуля настроек. Она должна содержать точечный путь к модулю настроек. Вы можете использовать разные значения для разработки и производства; все зависит от того, как вы организуете свои настройки.
Если эта переменная не установлена, то по умолчанию wsgi.py
устанавливает ее в значение mysite.settings
, где mysite
- имя вашего проекта. Таким образом, runserver
по умолчанию обнаруживает файл настроек по умолчанию.
Примечание
Поскольку переменные окружения относятся ко всему процессу, это не работает, когда вы запускаете несколько сайтов Django в одном процессе. Это происходит с mod_wsgi.
Чтобы избежать этой проблемы, используйте режим демона mod_wsgi с каждым сайтом в собственном процессе демона, или переопределите значение из окружения, обеспечив os.environ["DJANGO_SETTINGS_MODULE"] = "mysite.settings"
в вашем wsgi.py
.
Применение промежуточного программного обеспечения WSGI¶
Чтобы применить WSGI middleware, вы можете обернуть объект приложения. Например, вы можете добавить эти строки в нижней части wsgi.py
:
from helloworld.wsgi import HelloWorldApplication
application = HelloWorldApplication(application)
Вы также можете заменить WSGI-приложение Django на пользовательское WSGI-приложение, которое впоследствии делегируется WSGI-приложению Django, если вы хотите объединить Django-приложение с WSGI-приложением другого фреймворка.