Развёртывание с 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 и 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 мидлваров

Чтобы использовать 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.

Обновление с Django < 1.4

Если вы обновляетесь с Django 1.3.x и ниже, ваш проект не содержит wsgi.py файл.

Вы можете добавить его в главный каталог вашего приложения (скорее всего рядом с settings.py и urls.py) с следующим кодом:

import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")

from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

Строка os.environ.setdefault содержит список настроек используемых модулей, на случай если вы еще не задали явно переменную DJANGO_SETTINGS_MODULE. Вам нужно будет изменить эту строку, заменив mysite на имя вашего проекта, чтобы путь к настройкам вашего проекта был правильным.

Также добавьте WSGI_APPLICATION = "mysite.wsgi.application" в настройки проекта, чтобы runserver мог найти объект application. Не забудьте заменить mysite на название вашего проекта.