Frage

Dies ist die Anmeldungs ??Ansichten:

def login(request):

    redirect_to = request.REQUEST.get("next")
    if request.method == 'POST': 

        formL = LoginForm(data=request.POST)           
        if formL.is_valid(): 

            if not redirect_to or '//' in redirect_to or ' ' in redirect_to:
                redirect_to = "/blogs/"

            from django.contrib.auth import login
            login(request, formL.get_user())
            if request.session.test_cookie_worked():
                request.session.delete_test_cookie()
            return HttpResponseRedirect(redirect_to)

    else:

    formL = LoginForm(request)                 

request.session.set_test_cookie()  

return render_to_response('blogs.html', {
    'formL': formL, }, context_instance=RequestContext(request))

login = never_cache (Login)

Wenn ich zum Beispiel example.com/myblog/ dann war ich Umleitung zu example.com/accounts/login/?next=/myblog /

aber wenn ich Einsatz Benutzer und PSW für die Anmeldung dann war ich Umleitung / blogs / und nicht / myblog /

Warum?

Edit: request.REQUEST.get ( 'next', '') zurückkehren immer ''

Ich weiß nicht, warum: - \

War es hilfreich?

Lösung

Wie funktioniert Ihre Login-Formular-Vorlage aussehen?

Ihr Problem

Sie senden nicht die redirect_to Pfad zu Ihrer Vorlage und Sie sollten. Ihre Rückkehr sollte wie folgt aussehen:

return render_to_response('blogs.html', {
        'formL': formL,
        'next': redirect_to,
    }, context_instance=RequestContext(request)
)

Die Login-Formular Aktion sollte wie folgt aussehen:

<form action="/your_login_url/?next={{ next }}" method="post">

Wenn Sie also /myblog/ gehen Sie zu /your_login_url/?next=/myblog/ weitergeleitet, macht die Login-Ansicht dann das Anmeldeformular und ersetzt die next Variable in Login-Formular action-Attribute, so dass es wie /your_login_url/?next=/myblog/ aussieht und wenn Sie das Formular abschicken Sie erhalten angemeldet und umgeleitet zu /myblog/ (Sachen nach if request.method == 'POST': wird ausgeführt).

Ihrer Ansicht nach redirect_to = request.REQUEST.get("next") funktioniert gut, wenn Sie nur die Login-Seite GET aber wenn Sie es POST gibt es nicht next Variablensatz in GET.

Auch Note

Anmelden Ansicht sollte Ihr Blog nicht machen, Blogs sehen sollte das tun.

Dies ist, wie Djangos zurückgegebene Antwort aussieht, beachten Sie die Zeile, wo es heißt redirect_field_name: redirect_to,, redirect_field_name den Wert next standardmäßig hat.

return render_to_response(template_name, {
    'form': form,
    redirect_field_name: redirect_to,
    'site': current_site,
    'site_name': current_site.name,
}, context_instance=RequestContext(request))

Und, scheinen Sie die Login-Ansicht zu überschreiben nur für Standard-Umleitung? Das ist nicht richtig IMHO. Der richtige Ort, um Set Standardposition für Login-Umleitung ist in Ihrem settings.py indem LOGIN_REDIRECT_URL .

Aber, da Sie Ihre eigene Login-Ansicht schreiben, warum nicht den in django als Skelett verwenden und erweitern Sie dann auf das, was Sie brauchen.

Andere Tipps

Da

 not redirect_to or '//' in redirect_to or ' ' in redirect_to

den Wert true?


Vielleicht, wenn wir den Mann zu fischen zu lehren? http://docs.python.org/library/logging.html

Setzen Sie diese an der Spitze

import logging
LOG_FILENAME = '/tmp/logging_example.out'
logging.basicConfig(filename=LOG_FILENAME,level=logging.DEBUG)

Setzen Sie dies, wo es in Ihrem Code (zB nach der if-Anweisung)

angemessen erscheint
logging.debug("redirect_to = %s" % redirect_to)

Ausführen es, dann schauen Sie sich den Inhalt von '/tmp/logging_example.out'

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top