Django built-in vista di accesso e gli errori
-
29-09-2019 - |
Domanda
Sto usando il punto di vista django.contrib.auth.views.login and
.logout
. Molto utile, ha lavorato fuori dalla scatola, sarebbe distribuire nuovamente AAA +, ecc
Il problema sorge dal momento che non sto usando una pagina di accesso separata, ma ho una casella di login in ogni pagina (a meno che l'utente è connesso, naturalmente). E così, quando la combinazione username / password è errata, ottengo un errore. Quale di questi tre percorsi devo scegliere?
- C'è un modo segreto per reindirizzare al prossimo non solo in caso di successo, ma anche in caso di errore. Se è così, mi dica!
- scrivo il mio punto di vista di accesso, mettendo a usare il sistema di messaggio di Django nel frattempo
- I scrivere una pagina di login (beh, è ??solo manca un modello) in modo da poter sfruttare appieno le suggestioni del sistema di autenticazione Django.
Soluzione
Una delle possibili soluzioni (primo + terze scelte nel proprio elenco):
- È necessario fornire pagina di login speciale (cioè definiscono
registration/login.html
) e per non loggate utente ogni pagina normale ha form di login; - se accessi utente normalmente (questa logica gestita in
django.contrib.auth.views.login
):- per la pagina normale: utente reindirizzamento alla pagina da dove loggate;
- per la pagina di login: se c'è
next
param, reindirizzare lì, altrimenti reindirizzamento alla pagina principale;
- Se l'utente non riesce a login: redirect (o ridisegna) pagina di login con errori forniti;
- Se l'utente è in loged:. Normale pagina fornisce un collegamento per la disconnessione (pagina speciale è ancora lì nel caso se di effettuare nuovamente il login o login attraverso un altro conto mancanza utente)
Nelle pagine normali, form di login dovrebbe avere qualcosa di simile <input type="hidden" name="next" value="{{ request.path }}" />
.
Nel progetto impostazioni:
# in settings.py
LOGIN_URL = '/login' # this should coinside with url pattern of login view
LOGOUT_URL = '/logout' # same but for logout view
LOGIN_REDIRECT_URL = '/' # url to main page
NB .: Non faccio uso di Django di buildin vista di logout invece io uso il mio: quasi lo stesso, ma fa il logout solo per le richieste POST. Questo non consente agli utenti di effettuare il logout per <img src='my_site/logout' />
codice dannoso.