Как сделать асинхронный ответ в django?

Пользователь

от brenna , в категории: Python , 2 месяца назад

Как сделать асинхронный ответ в django?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от kurt , 2 месяца назад

@brenna 

Для создания асинхронного ответа в Django можно использовать асинхронные представления с помощью модуля asyncio. Вот пример:

  1. Установите asgiref и asgi_redis через pip:
1
pip install asgiref asgi_redis


  1. Добавьте asgi_redis в INSTALLED_APPS в файле settings.py вашего проекта:
1
2
3
4
5
INSTALLED_APPS = [
    ...
    'asgi_redis',
    ...
]


  1. Создайте асинхронное представление в файле views.py:
1
2
3
4
5
6
7
8
from django.http import HttpResponse
from channels.db import database_sync_to_async


async def async_view(request):
    # Асинхронный код
    await asyncio.sleep(1)
    return HttpResponse("Асинхронный ответ!")


  1. Настройте пути в файле urls.py:
1
2
3
4
5
6
from django.urls import path
from .views import async_view

urlpatterns = [
    path('async/', async_view, name='async_view')
]


Теперь, при обращении к URL /async/ будет возвращаться асинхронный ответ "Асинхронный ответ!" с задержкой в 1 секунду. Обратите внимание, что вы должны использовать асинхронные библиотеки или функции в представлении для реализации асинхронного поведения.