Встречается на собеседованиях • сегодня

Можно ли сделать функции представления асинхронными в Django

Да, в Django можно создавать асинхронные view-функции, начиная с версии 3.1. Для этого нужно использовать ключевое слово async def вместо обычного def. Однако есть важные ограничения:

  1. ORM Django (запросы к БД) не является асинхронным по умолчанию. Для асинхронных запросов нужно использовать sync_to_async из django.core.async_utils или дожидаться Django 4.1+ с нативной async ORM поддержкой.
  1. Middleware должно поддерживать async (либо быть async-совместимым).

Пример асинхронного представления:

python
from django.http import JsonResponse

async def my_async_view(request):
    import asyncio
    await asyncio.sleep(1)
    return JsonResponse({'status': 'ok'})

Для смешанного sync/async кода можно использовать:

python
from asgiref.sync import sync_to_async

@sync_to_async
def get_sync_data():
    return SomeModel.objects.all()

async def hybrid_view(request):
    data = await get_sync_data()
    return JsonResponse({'data': list(data.values())})
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы