我有以下REST方法,每次单击jQuery选项卡以存储活动选项卡时,都会更新会话的值。
@csrf_exempt
def update_active_tab_request(request):
"""
Stores the active tab for a given tab item
"""
for tab, active in request.GET.iteritems():
request.session[tab] = int(active)
return HttpResponse("OK", status=200)
这是一个相当简单的例程,而我遇到的问题是该值并不总是存储在会话中。我查看了Web服务器日志,并且我已经使用了日志语句来验证是否正在调用代码。一切似乎都有效,但我发现当这个方法返回时,会话有可能没有更新。
认为这可能是更新会话的性能/同步问题,我已将会话存储更改为SESSION_ENGINE='django.contrib.sessions.backends.cache'
。但这没有帮助。我还设置SESSION_SAVE_EVERY_REQUEST=True
以始终保存会话。这也没有帮助。
我无法解释这种行为。任何帮助揭示这个问题的人都会非常感激。
答案 0 :(得分:0)
虽然我无法解决这个问题,但我发现了一种解决方法。我使用Django的低级缓存API手动将活动选项卡存储在缓存中。
from django.core.cache import cache
def save_viewer_tab(active, session_key, tab):
cache.set(session_key + ":" + str(tab), int(active))
def get_viewer_tab(session_key, tab, default=0):
return cache.get(session_key + ":" + str(tab), default)
@csrf_exempt
def update_active_tab_request(request):
"""
Stores the active tab for a given tab item
"""
session_key = request.session._session_key
for tab, active in request.GET.iteritems():
save_viewer_tab(active, session_key, tab)
return HttpResponse("OK", status=200)
它工作正常,但我仍然不明白为什么以前存储会话中选项卡值的代码不可靠。
这是一个停止间隙测量,直到找到合适的解决方案。