Login e Redirect
-
26-09-2019 - |
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é: - \
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'