Я смущен!
Я пытаюсь использовать систему кэширования 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, а затем отслеживать его (передавая его в качестве аргумента шаблону?) И сбрасывать его только после успешного сохранения в POST.
У кого-нибудь есть лучшие идеи?
Спасибо