Как развернуть с 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, можно обернуть объект приложения. Например, можно добавить следующие строки в конец файла wsgi.py:
from helloworld.wsgi import HelloWorldApplication application = HelloWorldApplication(application)
Если вы хотите объединить приложение Django с WSGI-приложением другого фреймворка, можно также заменить WSGI-приложение Django собственным WSGI-приложением, которое затем будет делегировать вызовы WSGI-приложению Django.
© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/6.0/howto/deployment/wsgi/index/