Domanda

Questa è la mia opinione accesso:

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)

Quando vado, per esempio, per example.com/myblog/ allora sono stato reindirizzamento a example.com/accounts/login/?next=/myblog /

, ma quando inserisco utente e PSW per il login allora sono stato reindirizzamento a / blog / e non / MyBlog /

Perché?

Modifica: request.REQUEST.get ( 'next', '') restituisce sempre ''

Non so perché: - \

È stato utile?

Soluzione

Come funziona il vostro modello di modulo login assomigliare?

Il tuo problema

Non sta inviando il percorso redirect_to per il modello e si dovrebbe. Il vostro ritorno dovrebbe essere simile a questo:

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

L'azione form di login dovrebbe essere simile a questo:

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

Quindi, quando si va a /myblog/ si ottiene reindirizzato alla /your_login_url/?next=/myblog/, la vista di login quindi rende il form di login e sostituisce la variabile next in login attributo form action così sembra /your_login_url/?next=/myblog/ e quando si invia il modulo si ottiene il login e reindirizzato a /myblog/ (roba dopo if request.method == 'POST': viene eseguito).

Secondo voi, redirect_to = request.REQUEST.get("next") funziona bene quando si GET solo la pagina di login, ma quando si POST ad esso non c'è next variabile stabilita GET.

Nota anche

vista Login Non dovrebbe rendere il tuo blog, i blog vista dovrebbe farlo.

Questo è come sembra di risposta restituiti di Django come, notare la linea di cui si dice redirect_field_name: redirect_to,, redirect_field_name ha il valore di next per impostazione predefinita.

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

E, ti sembra di ignorare la vista di accesso unico per il reindirizzamento di default? Questo non è IMHO giusto. Il posto giusto per set posizione predefinita per il reindirizzamento di accesso è nel vostro settings.py impostando LOGIN_REDIRECT_URL .

Ma, dal momento che si sta scrivendo il proprio punto di vista di accesso perché non utilizzare quello in Django come uno scheletro e quindi espandere su di esso ciò che è necessario.

Altri suggerimenti

A causa

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

restituisce true?


Forse, se si insegna l'uomo per i pesci? http://docs.python.org/library/logging.html

Mettete questo in cima

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

Mettere questo, dove sembra opportuno nel codice (ad esempio, dopo l'istruzione if)

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

Esegui, quindi guardare il contenuto del '/tmp/logging_example.out'

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top