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