Django会话持久但丢失数据 [英] Django Session Persistent but Losing Data

查看:247
本文介绍了Django会话持久但丢失数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经工作了几个小时,试图理解以下问题:我有一个用户发送一个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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆