Как развернуть с ASGI
Как и WSGI, Django также поддерживает развертывание на ASGI — новом стандарте Python для асинхронных веб-серверов и приложений.
Команда управления Django startproject создает для вас конфигурацию ASGI по умолчанию, которую при необходимости можно настроить для своего проекта, а затем указать любому серверу приложений, совместимому с ASGI, использовать ее.
В документации Django приведены инструкции по началу работы со следующими ASGI-серверами:
- Как использовать Django с Daphne
- Как использовать Django с Hypercorn
- Как использовать Django с Uvicorn
Объект application
Как и в случае с WSGI, в ASGI необходимо предоставить вызываемый объект application, с помощью которого сервер приложений взаимодействует с вашим кодом. Обычно он предоставляется в виде объекта с именем application в доступном серверу модуле Python.
Команда startproject создает файл <project_name>/asgi.py, содержащий такой вызываемый объект application.
Он не используется сервером разработки (runserver), но может использоваться любым ASGI-сервером как при разработке, так и в production.
ASGI-серверы обычно принимают путь к вызываемому объекту приложения в виде строки; для большинства проектов Django он будет выглядеть так: myproject.asgi:application.
Предупреждение
Стандартный обработчик ASGI в Django выполняет весь ваш код в синхронном потоке, но если вы решите использовать собственный асинхронный обработчик, необходимо учитывать безопасность при работе с асинхронным кодом.
Не вызывайте блокирующие синхронные функции или библиотеки в асинхронном коде. Django предотвращает такие вызовы для тех своих компонентов, которые небезопасны при асинхронной работе, но сторонние приложения и библиотеки Python могут этого не делать.
Настройка модуля параметров
Когда ASGI-сервер загружает ваше приложение, Django должен импортировать модуль параметров — именно в нем определено все ваше приложение.
Django использует переменную окружения DJANGO_SETTINGS_MODULE, чтобы определить нужный модуль параметров. Она должна содержать путь к модулю параметров, записанный через точки. Для разработки и production можно использовать разные значения — все зависит от того, как организованы ваши параметры.
Если эта переменная не задана, команда asgi.py устанавливает для нее значение mysite.settings, где mysite — имя вашего проекта.
Применение промежуточного ПО ASGI
Чтобы применить промежуточное ПО 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/6.0/howto/deployment/asgi/index/