Как развертывать с помощью WSGI

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

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

Django включает документацию по началу работы для следующих серверов WSGI:

Объект 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-приложением другого фреймворка.

Вернуться на верх