Сессия Django сохраняется, но теряет данные

Я работал в течение нескольких часов, пытаясь понять следующую проблему: у меня есть пользователь, который отправляет запрос Ajax для динамической отправки формы и записи того, что количество форм для чтения при отправке увеличилось. С этой целью я использую request.session['editing_foo'] = { 'prefix_of_form_elements' : pkey }, чтобы связать их с базой данных для сохранения и загрузки (-1 для новых форм, которые еще не были сохранены).

Однако, когда я использую следующий код (см. внизу), я получаю следующий странный результат:

1-й клик:

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

2-й клик:

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

3-й запрос:

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

Всем большое спасибо!

Примечание. Это продолжение предыдущего вопроса. относительно одного и того же исходного кода.


person SapphireSun    schedule 22.12.2009    source источник


Ответы (1)


Я не думаю, что полностью понимаю вопрос, но вы можете взглянуть на то, какие движок сеанса, который вы используете

если вы используете механизм сеанса кеша, вам нужно убедиться, что у вас правильно настроено кеширование (например, фиктивный кеш просто выбросит данные вашего сеанса)

другая возможность заключается в том, что ваш сеанс не сохраняется, потому что вы не меняете сеанс, вы изменяете изменяемый объект, который хранится в сеансе. вы можете попробовать принудительно сохранить сеанс добавив это где-нибудь в вашем представлении:

request.session.modified = True
person Jiaaro    schedule 22.12.2009
comment
Красивый! Ты гений! Я никогда не видел упоминания об этой опции в документах! - person SapphireSun; 22.12.2009
comment
Спасибо бро ..! ты спасаешь мои дни :P - person Mitul Shah; 26.06.2014