2012-07-23 13 views
21

Ho un flusso nella mia applicazione django in cui reindirizzo l'utente a un altro servizio (ad esempio PayPal) che, dopo un po 'di elaborazione, restituisce l'utente sul mio server. Il punto di ritorno sul mio server è una semplice pagina HTML di successo che renderizzo usando direct_to_template.Come escludere la protezione CSRF su direct_to_template

Per alcuni strani motivi, l'altro server invia una richiesta POST e quindi l'utente vede un errore di token CSRF mentre l'altro server non restituisce alcun token CSRF.

Come esonerare una vista direct_to_template dai token CSRF?

risposta

34

È possibile utilizzare il decoratore csrf_exempt per disabilitare la protezione CSRF per una vista particolare.

Dite il vostro modello di url è:

('^my_page/$', direct_to_template, {'template': 'my_page.html'}) 

Aggiungere la seguente import al urls.py:

from django.views.decorators.csrf import csrf_exempt 

quindi modificare il modello URL:

('^my_page/$', csrf_exempt(direct_to_template), {'template': 'my_page.html'}) 
31

È possibile utilizzare @csrf_exempt decoratore per esportare token csrf per questo devi importare

from django.views.decorators.csrf import csrf_exempt 

quindi scrivere @csrf_exempt prima vista

questo funzionerà correttamente :)

+3

questo non risponde alla domanda a tutti, come si vuole utilizzare il costruito in funzione direct_to_template, non decorare la sua propria view –

+0

Puoi anche usare '@method_decorator (csrf_exempt)' nel metodo 'dispatch' per le tue viste basate sulla classe. –

Problemi correlati