Как развернуть с ASGI

Помимо WSGI, Django также поддерживает развертывание в ASGI , развивающемся стандарте Python для асинхронных веб-серверов и приложений.

startprojectКоманда управления Django устанавливает для вас конфигурацию 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 по умолчанию будет запускать весь ваш код в синхронном потоке, если вы решите запустить свой собственный обработчик async, вы должны знать об асинхронной безопасности.

Не вызывайте блокирующие синхронные функции или библиотеки в любом асинхронном коде. Django не позволяет вам делать это с частями Django, которые не являются асинхронно-безопасными, но то же самое может не относиться к сторонним приложениям или библиотекам Python.

Настройка модуля настроек

Когда сервер ASGI загружает ваше приложение, Django необходимо импортировать модуль настроек - это место, где определяется все ваше приложение.

Django использует DJANGO_SETTINGS_MODULEпеременная среды, чтобы найти соответствующий модуль настроек. Он должен содержать пунктирный путь к модулю настроек. Вы можете использовать другое значение для разработки и производства; все зависит от того, как вы организовываете свои настройки.

Если эта переменная не установлена, по умолчанию asgi.pyустанавливается значение mysite.settings, где mysite- имя вашего проекта.

Применение промежуточного программного обеспечения ASGI

Чтобы применить промежуточное ПО ASGI или встроить Django в другое приложение ASGI, вы можете обернуть applicationобъект Django в asgi.pyфайл. Например:

from some_asgi_library import AmazingMiddleware
application = AmazingMiddleware(application)

Copyright ©2021 All rights reserved