Я пытаюсь получить доступ к переменной сеанса с помощью 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).
ЕслиЯ использую глобальную переменную вместо сеанса, он работает отлично, предупреждение показывает увеличение числа.Но я читал, что использование глобальных переменных в представлениях не рекомендуется.
Итак, что мне не хватает?Как мне поделиться сессией с потоками?Должен ли я использовать глобальные переменные в этом случае?
Спасибо!
Редактировать: Это всего лишь пример моей проблемы, я упростил ее, чтобы ее было легко понять и полезнодругим.Поток представляет собой сложное приложение, и веб-приложение не будет общедоступным, это всего лишь графический интерфейс для быстрого доступа к приложению.