Как развертывать с помощью 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)
Вернуться на верх