2014-11-14 16 views
6

Se il controllo csrf fallisce, Django visualizza una pagina con errore 403.Django: Come sovrascrivere la CSRF_FAILURE_TEMPLATE

Error page displayed on csrf error

Mi sembra che questo errore può verificarsi in uso regolare, ad esempio, quando l'utente disattiva l'utilizzo dei cookie nelle sue impostazioni del browser.

Sfortunatamente, questo messaggio di errore non è molto utile per l'utente finale e ha un layout "django-error" (questo è un problema perché ad esempio manca la navigazione del sito).

Django ha un ottimo meccanismo per sovrascrivere i modelli ma sembra che questo modello sia hardcoded nel codice. https://github.com/django/django/blob/1.6.8/django/views/csrf.py

C'è un modo per sovrascrivere questo modello al fine di fornire un messaggio più amichevole agli utenti?

risposta

11

consultare la Django document, è possibile impostare CSRF_FAILURE_VIEW nel vostro settings.py, come ad esempio:

CSRF_FAILURE_VIEW = 'your_app_name.views.csrf_failure' 

Inoltre, è necessario definire una funzione csrf_failure nella vista (necessità di avere questa firma: def csrf_failure(request, reason="") basa sul documento), che è simile a:

def csrf_failure(request, reason=""): 
    ctx = {'message': 'some custom messages'} 
    return render_to_response(your_custom_template, ctx) 

E si può scrivere il vostro modello personalizzato come:

<!DOCTYPE html> 
<html> 
    <head lang="en"> 
     <meta charset="UTF-8"> 
     <title></title> 
    </head> 
    <body> 
     {{ message }} 
    </body> 
</html> 
+0

Grazie. È esattamente ciò di cui ho bisogno. Basta notare che il "motivo" è un messaggio di sviluppo e non deve essere mostrato all'utente finale. Quindi, nel mio caso, non lo visualizzerò come modello. – luc

+0

@luc, ho notato e modificato la mia risposta, grazie! – dazedconfused

+0

Come testare questo? – guival

Problemi correlati