Django Session Persistent but Losing Data

♀尐吖头ヾ 提交于 2019-12-07 05:54:01

问题


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 Click:

{} foousername
next_key 1
1
{u'1-foo': -1}

2nd Click:

{} foousername
next_key 1
1
{u'1-foo': -1}

3rd Request:

{} foousername
next_key 1
1
{u'1-foo': -1}

What the heck is going on?

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))

Thank you all very much!

Note: This is a followup to a previous question concerning the same source code.


回答1:


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


来源:https://stackoverflow.com/questions/1945691/django-session-persistent-but-losing-data

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!