Странное перенаправление и поведение сессии - PullRequest
0 голосов
/ 30 ноября 2010

У меня регистрация делится на несколько шагов. Текущая страница сохраняется в сессии. Но мои функции ведут себя странно. Если мы обновим step1, переменная в сеансе изменится на 2, и вместо нее будет загружено step2. Внутри этого шага я проверяю, был ли пользователь уже создан, и если нет, уменьшаю step до 1 и перенаправляю в представление, надеясь, что step будет отображено. Но вместо этого я получаю

def my_rte_landing(request):
    step = request.session.get("step", request.REQUEST.get("step", 1))
    logging.debug("my_rte_landing top step: %s" % step)

    if request.method == "POST":
        (... next steps ...)
    else:
        if step == 1:
            logging.debug("step 1")
            html = render_step1(request)
            request.session["step"] = 2      

            return render_to_response('socialauth/login_page.html',{'html': html,}, context_instance=RequestContext(request))            
        else:
            logging.debug("step 2")
            logging.debug("step2, step: %s" % request.session.get('step'))
            new_user = True
            new_user_id = request_user_uid(request, request.user.id)    
            html = render_step2(request)
            request.session["step"] = 3

            return render_to_response('socialauth/login_page.html', 
                                    {'html': html}, context_instance=RequestContext(request))

вот моя функция проверки существования пользователя:

def request_user_uid(request, user_id):
    if request.session['step'] == 2:
        logging.debug("1 here")
        id = get_user_id(user_id)
        if id:
            logging.debug("2. here")
            return id

        request.session['step'] = 1
        logging.debug("3. here")
        logging.debug("step: %s" % request.session.get('step'))
    return HttpResponseRedirect(reverse('my_rte_landing'))

И моя отладка выглядит так (я впервые захожу на страницу, не регистрируюсь, обновляю, вижу шаг 2, обновляю, еще шаг 2)

2010-11-30 17:11:21,434 DEBUG my_rte - nie zalogowany
2010-11-30 17:11:23,245 DEBUG my_rte_landing top step: 1
2010-11-30 17:11:23,246 DEBUG step 1
(first refresh)
2010-11-30 17:11:34,626 DEBUG my_rte_landing top step: 2
2010-11-30 17:11:34,626 DEBUG step 2
2010-11-30 17:11:34,626 DEBUG step2, step: 2
2010-11-30 17:11:34,626 DEBUG 1 here
2010-11-30 17:11:34,628 DEBUG 3. here
2010-11-30 17:11:34,628 DEBUG step: 1
(second refresh)
2010-11-30 17:11:59,523 DEBUG my_rte_landing top step: 3
2010-11-30 17:11:59,523 DEBUG step 2
2010-11-30 17:11:59,524 DEBUG step2, step: 3

Ответы [ 2 ]

0 голосов
/ 01 декабря 2010

вы смешиваете возвращаемые значения:

def request_user_uid(request, user_id):
    if request.session['step'] == 2:
        logging.debug("1 here")
        id = get_user_id(user_id)
        if id:
            logging.debug("2. here")
            return id #### !!!! returning some value

        request.session['step'] = 1
        logging.debug("3. here")
        logging.debug("step: %s" % request.session.get('step'))
    return HttpResponseRedirect(reverse('my_rte_landing')) #### !!!! HttpResponseRedirect

и использование функции: new_user_id = request_user_uid(request, request.user.id) # contains HttpResponseRedirect instance это намеренно?

0 голосов
/ 30 ноября 2010

Вы сбрасываете шаг ..

        new_user_id = request_user_uid(request, request.user.id) 
        # request.session["step"] is currently set to 1 ... however the 
        #  following lines undo that...
        html = render_step2(request)
        request.session["step"] = 3

Поэтому, хотя вы можете установить шаг == 1 в request_user_uid (), в следующий раз вы сделаете его обратно равным 3 ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...