0

ビュー.py

def login_user(request):
    if request.POST:
        sform = LoginForm(request.POST)
        rform = UserForm()
        if sform.is_valid():
            username = request.POST.get('username')
            password = request.POST.get('password')
            user = authenticate(username = username,password = password)
            if user is not None:
                if user.is_active:
                    login(request,user)
                    return redirect(request.path)
                else:
                    state = "Your account is not active."
                    #or first set the user to is active and then log in 
                    return redirect('acitvate_account',user = user)
                return render_to_response('home.html',{'state':state,'user':user},context_instance = RequestContext(request))
            else:
                state = "Incorrect Username or Password"
                #sform = LoginForm()
                form = LoginForm()
                return render_to_response('register.html',{'state':state,'sform':sform,'rform':rform,'form':form},context_instance = RequestContext(request))
        else:
            state = "Invalid form"
            dLoginForm = LoginForm()
            rform = PartialSignupForm()
            return render_to_response('register.html',{'sform':sform,'rform':rform,'form':form},context_instance = RequestContext(request))
    else:
        dLoginForm = LoginForm()
        rform = PartialSignupForm()
        return render_to_response('category.html',{'dLoginForm':dLoginForm,'rform':rform},context_instance = RequestContext(request))

urls.py

urlpatterns += patterns('beenthere.views',
    #beenthere urls
    (r'^$','index'),
    (r'^home2/$','category'),
    (r'^accounts/login/$','login_user'),
    (r'^accounts/register/$','register_user'),
    (r'^home/(?P<user>\w*)$','home'),
    (r'^logout/','logout_user'),

    )

疑問に思う

リクエストの送信元と同じ URL をリダイレクトするにはどうすればよいでしょうか。request.path を使用してみましたが、/accounts/login/ url にリダイレクトされてしまいます。

4

1 に答える 1

2

あなたがする必要があるのは、ログインフォームを表示したときのリファラーが何であったかを追跡し、おそらくその値をユーザーセッションに保存し、ユーザーが正常にログインしたらそのURLにユーザーをリダイレクトすることです。

次のようなもの:

def login_user(request):
    if request.POST:
        sform = LoginForm(request.POST)
        rform = UserForm()
        if sform.is_valid():
            username = request.POST.get('username')
            password = request.POST.get('password')
            user = authenticate(username = username,password = password)
            if user is not None:
                if user.is_active:
                    login(request,user)
                    return redirect(request.path)
                else:
                    state = "Your account is not active."
                    #or first set the user to is active and then log in 
                    return redirect(req.session['after_login_url'],user = user)
                return render_to_response('home.html',{'state':state,'user':user},context_instance = RequestContext(request))
            else:
                state = "Incorrect Username or Password"
                #sform = LoginForm()
                form = LoginForm()
                return render_to_response('register.html',{'state':state,'sform':sform,'rform':rform,'form':form},context_instance = RequestContext(request))
        else:
            state = "Invalid form"
            dLoginForm = LoginForm()
            rform = PartialSignupForm()
            return render_to_response('register.html',{'sform':sform,'rform':rform,'form':form},context_instance = RequestContext(request))
    else:
        dLoginForm = LoginForm()
        rform = PartialSignupForm()
        req.session['after_login_url'] = req.META.get('HTTP_REFERER')
        return render_to_response('category.html',{'dLoginForm':dLoginForm,'rform':rform},context_instance = RequestContext(request))

もちろん、HTTP_REFERERヘッダーが存在することを確認するためのチェックを追加し、after_login_urlキーが存在することを確認する必要があります(外部サイトがログインページに直接リンクしている場合など、適切な値を持っている可能性があります)。これらのテストのいずれかが失敗した場合(ユーザーのプロファイルページやサイトのインデックスページなど)、安全にフォールバックできます。

于 2012-08-16T14:20:56.853 に答える