Как развертывать с помощью ASGI¶
Помимо WSGI, Django также поддерживает развертывание на ASGI, развивающемся стандарте Python для асинхронных веб-серверов и приложений.
Команда управления Django startproject
устанавливает для вас конфигурацию ASGI по умолчанию, которую вы можете настроить по мере необходимости для вашего проекта и направить на использование любого ASGI-совместимого сервера приложений.
Django включает документацию по началу работы для следующих серверов ASGI:
Объект application
¶
Как и WSGI, ASGI предоставляет вызываемый объект application
, который сервер приложений использует для взаимодействия с вашим кодом. Обычно он предоставляется в виде объекта с именем application
в модуле Python, доступном серверу.
Команда startproject
создает файл <project_name>/asgi.py
, содержащий такой application
вызываемый файл.
Он не используется сервером разработки (runserver
), но может использоваться любым ASGI-сервером как в разработке, так и в производстве.
Серверы ASGI обычно принимают путь к вызываемому приложению в виде строки; для большинства проектов Django это будет выглядеть как myproject.asgi:application
.
Предупреждение
Хотя стандартный ASGI-обработчик Django будет выполнять весь ваш код в синхронном потоке, если вы решите запустить свой собственный асинхронный обработчик, вы должны помнить об асинхронной безопасности.
Не вызывайте блокирующие синхронные функции или библиотеки в любом асинхронном коде. Django не позволяет вам делать это с теми частями Django, которые не являются async-безопасными, но то же самое может быть не верно для сторонних приложений или библиотек Python.
Конфигурирование модуля настроек¶
Когда ASGI-сервер загружает ваше приложение, Django должен импортировать модуль настроек - именно там определено все ваше приложение.
Django использует переменную окружения DJANGO_SETTINGS_MODULE
для поиска соответствующего модуля настроек. Она должна содержать точечный путь к модулю настроек. Вы можете использовать разные значения для разработки и производства; все зависит от того, как вы организуете свои настройки.
Если эта переменная не установлена, то по умолчанию asgi.py
устанавливает ее в значение mysite.settings
, где mysite
- имя вашего проекта.
Применение промежуточного программного обеспечения ASGI¶
Чтобы применить ASGI middleware или встроить Django в другое ASGI-приложение, вы можете обернуть объект Django application
в файл asgi.py
. Например:
from some_asgi_library import AmazingMiddleware
application = AmazingMiddleware(application)