WSGI серверы
Основной платформой для развертывания Django является WSGI, стандарт Python для веб-серверов и приложений.
Команда управления Django startproject устанавливает для вас минимальную конфигурацию WSGI по умолчанию, которую вы можете настроить по мере необходимости для вашего проекта и направить на использование любого WSGI-совместимого сервера приложений.
Django включает документацию по началу работы для следующих серверов WSGI:
Как использовать Django с Gunicorn
Как использовать Django с uWSGI
Как использовать Django с Apache и mod_wsgi
Как аутентифицироваться в базе данных пользователей Django из Apache
Объект application
Ключевой концепцией развертывания с помощью WSGI является вызываемый объект application, который сервер приложений использует для взаимодействия с вашим кодом. Обычно он предоставляется в виде объекта с именем application в модуле Python, доступном серверу.
Команда startproject создает файл <project_name>/wsgi.py, содержащий такой application вызываемый файл.
Он используется как на сервере разработки Django, так и в производственных развертываниях 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.
Чтобы избежать этой проблемы, используйте режим демона 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 на пользовательское WSGI-приложение, которое впоследствии делегируется WSGI-приложению Django, если вы хотите объединить Django-приложение с WSGI-приложением другого фреймворка.