Как развернуть приложение с ASGI
Помимо WSGI, Django также поддерживает развертывание на ASGI, новом стандартном Python-протоколе для асинхронных веб-серверов и приложений.
Команда управления Django startproject настраивает для вас по умолчанию конфигурацию ASGI, которую вы можете настроить по мере необходимости для вашего проекта и указать любой сервер приложений, совместимый с ASGI.
Django включает документацию для начала работы со следующими серверами ASGI:
- Как использовать Django с Daphne
- Как использовать Django с Hypercorn
- Как использовать Django с Uvicorn
Объект приложения
Как и в WSGI, в ASGI вам нужно предоставить вызываемый объект, который сервер приложения использует для взаимодействия со своим кодом. Он обычно предоставляется как объект с именем application в модуле Python, доступном для сервера.
Команда startproject создает файл <project_name>/asgi.py, который содержит такой вызываемый объект application.
Он не используется сервером разработки (runserver), но может использоваться любым сервером ASGI как в разработке, так и в производстве.
Сервера ASGI обычно принимают путь к вызываемому объекту приложения как строку; для большинства проектов Django это будет выглядеть как myproject.asgi:application.
Предупреждение
Хотя по умолчанию обработчик ASGI Django выполнит весь ваш код в синхронной потоковой нити, если вы выберете запуск собственного асинхронного обработчика, вы должны учитывать безопасность асинхронности.
Не вызывайте блокирующие синхронные функции или библиотеки в асинхронном коде. Django предотвращает это для частей Django, которые не являются безопасными для асинхронности, но это может не относиться к сторонним приложениям или библиотекам Python.
Настройка модуля настроек
Когда сервер ASGI загружает ваше приложение, Django необходимо импортировать модуль настроек — там определено всё ваше приложение.
Django использует переменную окружения DJANGO_SETTINGS_MODULE для поиска соответствующего модуля настроек. Он должен содержать точечный путь к модулю настроек. Вы можете использовать разные значения для разработки и производства; всё зависит от того, как вы организовали свои настройки.
Если эта переменная не установлена, по умолчанию asgi.py устанавливает её в mysite.settings, где mysite — это имя вашего проекта.
Применение middleware ASGI
Для применения middleware ASGI или для встраивания Django в другое приложение ASGI можно обернуть объект application Django в файле asgi.py. Например:
from some_asgi_library import AmazingMiddleware application = AmazingMiddleware(application)
© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/5.0/howto/deployment/asgi/index/