Получение информации за каждые x секунд

Я хотел бы узнать, есть ли способ проверять каждые x секунд значение в таблице базы данных в django, и если это нужное значение, то пользователь перенаправляется на другую страницу.

что я пробовал:

Я пытался использовать форму и она постит каждые 3 секунды и как только она делает пост она проверяет таблицу (модель), но страница даже не загружается, из-за сна (стоит отметить, что я пробовал SetTimeout и SetInterval)

def wait(request, slug):
    form = MatchForm()
    if request.method == 'POST':
        roomName = Match.objects.get(roomname = slug)
        if (int(roomName.num_players) > 1):
            return redirect(f'../play/{slug}')
    
    return render (request, 'chess/waiting_room.html', {'slug':slug, 'form':form})

waiting_room.html - javascript

function sleep(milliseconds) {
  const date = Date.now();
  let currentDate = null;
  do {
    currentDate = Date.now();
  } while (currentDate - date < milliseconds);
}


subm_form()

function subm_form(){
  var form = $("#form")
  form.submit();
  sleep(3000)
  subm_form()
};

Я предпочел перезагружать страницу каждые 10 секунд, и на основе таблицы представление делает что-то.

В том типе подхода, который был нужен мне, я видел, что POST и/или форма работали не очень хорошо, как ожидалось, но если вы хотите использовать его, попробуйте поместить функцию внутри TimeOut, которая дает submit.

VIEWS.PY

def wait(request, slug):
        roomName = Match.objects.get(roomname = slug)
        if (int(roomName.num_players) == 0):
            obj = Match.objects.get(roomname=slug)
            obj.player1 = f'{request.user.username}'
            obj.num_players = '1'
            obj.save()
        elif (int(roomName.num_players) == 1 and roomName.roomname.split('__vs__')[0] != request.user.username):
            obj = Match.objects.get(roomname=slug)
            obj.player2 = f'{request.user.username}'
            obj.num_players = '2'
            obj.save()
        elif (int(roomName.num_players) == 2):
            return redirect(f'../play/{slug}')
    

    
        return render (request, 'chess/waiting_room.html', {'slug':slug})

def play(request, slug):
    room = Match.objects.get(roomname=slug)
    context = {
        'iterator':'',
        'slug':slug,
        'actual_player' : 0,
        'room':room,
    }
    
    return render (request, 'chess/play.html', context)

MYPAGE HTML

setTimeout(function(){window.location.href=window.location.href;}, 10000);
Вернуться на верх