0

この質問を修正させてください

以下のような独自のログイン ビューがあり、@login_requiredデコレータを実装しています。

def do_login(request):
form = LoginForm()# create an instance of a login form
logged_in =request.user.is_authenticated() # get login status

if logged_in:
    message='You are logged in '
    return render_to_response('login.html',locals())# return  
if request.method == 'POST':
    usr=request.POST['username'] #get username
    passwrd=request.POST['password']# get password
    form=LoginForm(request.POST) # create instance of loginform
    user=authenticate(username=usr,password=passwrd)# authenticate user
    if user is not None:
        if user.is_active:
            login(request,user) #log user in
            return HttpResponseRedirect("/login_success/")
        else:
            pass
    else:
        return render_to_response('login.html',locals())
else:
    return render_to_response('login.html',locals())

URLにアクセスしようとすると(パスワードを変更するなど)、ログインページに移動して最初にログインするため、これは機能します。ログインページでアドレスバーに表示されるURLはhttp://myapp.com/login/?next=/change_password/

ログインすると、http://myapp.com/login/login_success/代わりにに移動しhttp://myapp.com/login/change_password/ます。http://myapp.com/login/change_password/ログイン時に、ログインを求められる前に、目的の場所に自動的にリダイレクトされるようにしたいと考えています。どうすればこれを解決できますか

4

2 に答える 2

0

問題が何であるかがわかりました。代わりに、nextパラメーターのURLにアクセスする必要がありました{{request.GET.next}}{{next}}

だから私のコードは次のように変わりました:

テンプレートで、ログインフォームに非表示の入力を追加し、その値を{{request.GET.next}}

<input type="hidden" name="next" value="{{ request.GET.next }}" />

したがって、私のログインビューでは、隠しフィールドの値にアクセスし、その値を使用してログイン後にリダイレクトを行うことができました

def do_login(request):
form = LoginForm()# create an instance of a login form
logged_in =request.user.is_authenticated() # get login status

if logged_in:
    message='You are logged in '
    return render_to_response('reg/login.html',locals())# return  
if request.method == 'POST':
    usr=request.POST['username'] #get username
    passwrd=request.POST['password']# get password
    form=LoginForm(request.POST) # create instance of loginform
    user=authenticate(username=usr,password=passwrd)# authenticate user
    if user is not None:
        if user.is_active:
            login(request,user) #log user in
            return HttpResponseRedirect(request.POST['next'])
        else:
            pass
    else:
        return render_to_response('reg/login.html',locals())
else:
    return render_to_response('reg/login.html',locals())
于 2012-08-31T19:49:22.437 に答える
0

おそらくこのようなもの

テンプレート:

{% if user.is_authenticated %}
    <a href="{% url 'some_summary_url' %}">click me</a>
{% else %}
    <a href="{% url 'login' %}?next={% url 'some_summary_url' %}">click me</a>
{% endif %} 

意見:

return HttpResponseRedirect(request.GET.get('next', '/'))
于 2012-08-30T11:10:36.420 に答える