Совместное использование сеанса с потоками в представлениях Django - PullRequest
0 голосов
/ 23 января 2019

Я пытаюсь получить доступ к переменной сеанса с помощью AJAX.У меня есть два разных представления, основное (индекс) и другое, возвращающее только значение сеанса (refreshSession).

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

// views.py //

def refreshSession(request):
    sesAlarm = request.session['alarm']
    return JsonResponse({'alm': sesAlarm})

def index(request):
    request.session['alarm'] = 0

    t = Thread(target = threadFunction, args=(request,))
    t.daemon = True
    t.start()

    context={}
    return HttpResponse(template.render(context, request))

def threadFunction(request):
    while True:
        request.session['alarm'] += 1
        time.sleep(1)


// JS //

var idAlarm = setInterval(function(){
        $.ajax({
          type:"POST",
          url:"/app/update_session/",
          cache: 'false',
          success: function(data) {
            alert(data.alm);
          }
        });
      }, 5000);

Этот код всегда показывает предупреждения с '0'.Я думаю, что проблема в том, что изменения в потоке не отражаются в запросе в refreshSession (), потому что запрос не передается «ссылкой» на поток (я являюсь основным программистом C).

ЕслиЯ использую глобальную переменную вместо сеанса, он работает отлично, предупреждение показывает увеличение числа.Но я читал, что использование глобальных переменных в представлениях не рекомендуется.

Итак, что мне не хватает?Как мне поделиться сессией с потоками?Должен ли я использовать глобальные переменные в этом случае?

Спасибо!

Редактировать: Это всего лишь пример моей проблемы, я упростил ее, чтобы ее было легко понять и полезнодругим.Поток представляет собой сложное приложение, и веб-приложение не будет общедоступным, это всего лишь графический интерфейс для быстрого доступа к приложению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...