Как развернуть проект с помощью 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, которые не являются асинхронно-безопасными, но то же самое может быть не так для сторонних приложений или библиотек Python.
Конфигурирование модуля настроек¶
Когда сервер ASGI загружает ваше приложение, Django необходимо импортировать модуль настроек — именно там определяется все ваше приложение.
Django использует переменную среды DJANGO_SETTINGS_MODULE для нахождения соответствующего модуля настроек. Она должна содержать путь к модулю настроек. Вы можете использовать другое значение для разработки и производства; все зависит от того, как вы организуете свои настройки.
Если эта переменная не задана, то по умолчанию asgi.py устанавливает ее в mysite``settings, где mysite — это имя вашего проекта.
Применение ASGI middleware¶
Чтобы ASGI middleware или встроить Django в другое приложение ASGI, вы можете обернуть объект application Django в файле asgi.py. Для example:
from some_asgi_library import AmazingMiddleware
application = AmazingMiddleware(application)