Как развернуть приложение с WSGI
Основной платформой развертывания Django является WSGI, стандарт Python для веб-серверов и приложений.
Команда управления Django startproject настраивает для вас простую конфигурацию WSGI по умолчанию, которую вы можете настроить по мере необходимости для вашего проекта и направить любой сервер приложений, совместимый с WSGI.
Django включает документацию для начала работы с следующими серверами WSGI:
- Как использовать Django с Apache и mod_wsgi
- Аутентификация против базы данных пользователей Django из Apache
- Как использовать Django с Gunicorn
- Как использовать Django с uWSGI
Объект application
Ключевым понятием развертывания с WSGI является вызываемый объект application, который сервер приложения использует для связи со своим кодом. Он обычно предоставляется как объект с именем application в модуле Python, доступном для сервера.
Команда startproject создает файл <project_name>/wsgi.py, содержащий такой вызываемый объект application.
Он используется как сервером разработки Django, так и при развертывании WSGI в рабочей среде.
Серверы WSGI получают путь к вызываемому объекту application из своей конфигурации. Встроенные серверы Django, а именно команды runserver и runfcgi, считывают его из настройки WSGI_APPLICATION. По умолчанию он настроен на <project_name>.wsgi.application, что указывает на вызываемый объект application в <project_name>/wsgi.py.
Настройка модуля settings
Когда сервер 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-средств промежуточного ПО можно просто обернуть объект приложения. Например, вы можете добавить эти строки в нижней части wsgi.py:
from helloworld.wsgi import HelloWorldApplication application = HelloWorldApplication(application)
Вы также можете заменить приложение Django WSGI на пользовательское приложение WSGI, которое позже делегирует приложение Django WSGI, если вы хотите объединить приложение Django с приложением WSGI другого фреймворка.
Примечание
Некоторые сторонние WSGI-средства промежуточного ПО не вызывают close на объекте ответа после обработки запроса. В этих случаях сигнал request_finished не отправляется. Это может привести к неактивным подключениям к серверам баз данных и memcache.
© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/1.8/howto/deployment/wsgi/index/