我很困惑!
我正在尝试使用 Django 的缓存系统来存储一些数据,以便在用户与页面交互时可以在主视图的 GET/PUT 以及几个潜在的 AJAX 视图中访问它。
我认为我需要一个唯一的密钥来存储这些数据,以便用户可以同时处理多个实例(例如,如果他们在多个选项卡中打开了页面)。
我认为 session_key 可以用于此。但是,当使用基于缓存的会话时,此键似乎对所有实例都是相同的。
这是一些代码:
def my_view(request):
my_session_id = request.session.session_key
my_complex_thing_key = u"my_complex_thing_%s" % my_session_id
my_complex_thing = cache.get(my_complex_thing_key)
if not my_complex_thing:
my_complex_thing = my_complex_function() # this is very expensive, I want to avoid having to do it repeatedly in AJAX calls
cache.set(my_complex_thing_key, my_complex_thing)
if request.method == "GET":
my_form = MyFormFactory(my_complex_thing)
elif request.method == "POST":
my_form = MyFormFactory(request.POST, my_complex_thing)
if my_form.is_valid():
my_form.save()
return render_to_response('my_template.html', {"form": my_form}, context_instance=RequestContext(request))
问题是my_complex_thing_key
每次同一个用户运行这个视图时都是一样的。我希望每次用户发出新的 GET 请求时它都会改变。
在我的脑海中,我想我可以在 GET 中生成一个 guid,然后跟踪它(通过将它作为参数传递给模板?)并且只有在 POST 中成功保存后才重置它。
有没有人有更好的想法?
谢谢