Развёртывание с WSGI

Основной платформой для развертывания Django является WSGI, это фактически стандарт для веб-серверов и приложений на Python.

Команда startproject создаёт простую WSGI конфигурацию по-умолчанию, которую вы можете впоследствии изменить под нужды вашего проекта и использовать с любым WSGI-совместимым веб-сервером.

Django содержит описание работы со следующими WSGI серверами:

Объект application

Одна из ключевых концепций развертывания с WSGI заключается в указании функции, или вызываемого объекта, application, который использует веб-сервер для взаимодействия с вашим кодом. Обычно это объект application модуля Python доступного для сервера.

Команда startproject создаст файл <project_name>/wsgi.py, который содержит вызываемый объект application.

Этот файл использует как встроенным сервером для разработки, так и на боевом 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.

Для этого используйте daemon mode 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, если хотите совместить приложения Django с приложениями другого фреймворка.