Django会话持久但丢失数据 [英] Django Session Persistent but Losing Data
问题描述
我已经工作了几个小时,试图理解以下问题:我有一个用户发送一个Ajax请求来动态发送一个表单,并记录提交的表单数量增加。为此,我使用 request.session ['editing_foo'] = {'prefix_of_form_elements':pkey}
,以便我们将它们与数据库相关联以进行保存和加载(-1是为尚未保存的新表单)。
I have been working for hours trying to understand the following problem: I have a user send an Ajax request to dynamically send a form and record that the number of forms to read on submission has increased. Toward this end I use request.session['editing_foo'] = { 'prefix_of_form_elements' : pkey }
so that I can associate them with the database for saving and loading (-1 is for new forms that haven't been saved yet).
但是,当我使用以下代码(见底部)时,我得到以下奇怪的输出:
However, when I use the following code (see bottom) I get the following bizarre output:
1st点击:
{} foousername
next_key 1
1
{u'1-foo': -1}
第二点击:
{} foousername
next_key 1
1
{u'1-foo': -1}
第三个请求:
{} foousername
next_key 1
1
{u'1-foo': -1}
发生了什么?
id_fetcher = re.compile(r'\d')
@login_required
def ajax_add_foo(request):
def id_from_prefix(key):
return int( id_fetcher.search(key).group(0) )
if 'editing_foos' not in request.session:
print "reinitializing"
request.session['editing_foos'] = {}
print request.session['editing_foos'], request.user
keys = request.session['editing_foos'].keys()
if len(keys) == 0:
next_key = 1
else:
print [ id_from_prefix(key) for key in keys ]
next_key = max([ id_from_prefix(key) for key in keys ]) + 1
print "next_key", next_key
fooform = FooForm(prefix=next_key)
print next_key
request.session['editing_foos'].update( {create_prefix(FooForm, next_key) : -1 } ) # This quote is new and has no pkey
print request.session['editing_foos']
return render_to_response( 'bar/foo_fragment.html',
{'fooform' : fooform, },
context_instance=RequestContext(request))
非常感谢!
注意:这是对上一个问题关于相同的源代码。
Note: This is a followup to a previous question concerning the same source code.
推荐答案
我不认为我完全理解这个问题,但您可能想看看哪个会话引擎您正在使用
I don't think I completely understand the question, but you may want to take a look at which session engine you're using
如果您使用缓存会话引擎,您需要确保缓存正确设置(例如,虚拟缓存将抛出会话数据)
if you're using the cache session engine you need to make sure you have caching properly set up (for instance the dummy cache would just throw out your session data)
另一种可能性是,您的会话未被保存,因为您没有更改会话,您正在更改存储在会话中的可变对象。您可以尝试强制会话保存通过将它添加到您的视图中:
another possibility is that your session isn't being saved because you're not changing the session, you're changing a mutable object that is stored in the session. you can try forcing the session to save by adding this somewhere in your view:
request.session.modified = True
这篇关于Django会话持久但丢失数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!