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

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

Django’s startproject management command sets up a minimal default WSGI configuration for you, which you can tweak as needed for your project, and direct any WSGI-compliant application server to use.

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 мидлваров

To apply WSGI middleware you can wrap the application object. For instance you could add these lines at the bottom of wsgi.py:

from helloworld.wsgi import HelloWorldApplication
application = HelloWorldApplication(application)

Также вы можете заменить WSGI-приложение, предоставляемое с Django, если хотите совместить приложения Django с приложениями другого фреймворка.