@OneMoreUsername

Не могу понять асинхронность в Django, что и где читать?

Всех приветствую! Изучил питон, как первый язык, и Django, как первый фреймворк. Изучив основы по книге Дронова, получилось сделать несколько проектов, однако в данный момент я захотел сделать чат, для чего нужна асинхронность. Однако, после прочтения немалого количество статей, как на русскоязычных, так и на англоязычных просторах интернета, где либо даются самые верха, либо удаляются в дебри. Какие хорошие статьи и/или видеоролики для понятия асинхронности вы можете посоветовать?

Попробовал написать свой код с максимально простым чатом, не могли бы вы уточнить, что здесь неправильно?

@sync_to_async
def testchat(request):
    get_message = sync_to_async(Message.objects.all())
    message = get_message()
    if request.method == 'POST':
        msf = MessageForm(request.POST)
        if msf.is_valid():
            msf.save()
            return HttpResponseRedirect(reverse('main:testchat', args=()))
        else:
            context = {'form' : msf, 'message' : message}
            return render(request, 'main/testchat.html', context)
    else:
        msf = MessageForm(request.POST)
        context = {'form' : msf, 'message' : message}
        return render(request, 'main/testchat.html', context)
    
  #Сделал два варианта гов... кхм, кода.
    
async def testchat(request):
    message = await sync_to_async(Message.objects.all(), thread_sensitive=True)
    if request.method == 'POST':
        msf =  await sync_to_async(MessageForm(request.POST), thread_sensitive=True)
        
        if msf.is_valid():
            msf.save()
            return HttpResponseRedirect(reverse('main:testchat', args=()))
        else:
            context = {'form' : msf}
            return render(request, 'main/testchat.html', context)
    else:
        msf =  await sync_to_async(MessageForm(request.POST), thread_sensitive=True)
        context = {'form' : msf}
  • Вопрос задан
  • 149 просмотров
Решения вопроса 3
@bacon
Асинхронность в django занесли недавно, и она не во всех частях. Ну и использовать ее для обучения, очень плохая идея.

PS Асинхронность нужна для чатов на основе websocket, для этого обычно используют channels, но мне он вот очень не нравится (это мое субъективное мнение), я обычно, рядом поднимаю чат через aiohttp.

PS2 вот еще погуглил текущее состояния, люди пока сами пытаются писать реализацию, если не использовать channels, https://alex-oleshkevich.medium.com/websockets-in-...
Ответ написан
@dooMoob
Смысла писать на джанге асинхронный код до того моментка, как они подвезут асинхронную ОРМ, 0 целых 0 десятых.
Ответ написан
sergey-gornostaev
@sergey-gornostaev Куратор тега Django
Седой и строгий
Могу посоветовать документацию по asyncio для начала, а потом документацию по Django.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы