I moduli utilizzano il metodo POST necessario per la protezione CSRF? Sto seguendo un libro e gli esempi di codice generano errori 403. Ho fatto qualche ricerca e sembra come se avessi bisogno di abilitare CSRF in tutte le mie forme.Django: il modulo POST richiede CSRF? GET no?
Le mie domande sono:
fa Django ora richiedono che tutte le forme POST essere protette da CSRF?
Tutto quello che devi fare per raggiungere questo obiettivo è aggiungere 'django.middleware.csrf.CsrfViewMiddleware', render_to_response ritorno (modello, dizionario, context_instance = RequestContext (richiesta), e aggiungere '{% csrf_token%}' nel forma corrispondente? mi manca qualcosa qui?
Quando faccio questo, il modulo funziona bene. Quando uno di questi pezzi sono mancanti, non riesce a 403. voglio solo per assicurarsi che lo sto facendo DESTRA :)
Grazie in anticipo.
edit:
Per qualche ragione questo codice non ha senso per me, ma che pretende molto restituisce alcun errore. Si prega di ignorare la convalida primitiva in quanto non ho ottenuto la sezione del libro in cui mostra il modo più efficiente per farlo ancora.
def contact(request):
errors = []
if request.method == 'POST':
if not request.POST.get('subject',''):
errors.append('Enter a subject')
if not request.POST.get('message',''):
errors.append('Enter a message')
if request.POST.get('email', '') and '@' not in request.POST['email']:
errors.append('Enter a valid email address')
if not errors:
send_mail(
request.POST['subject'],
request.POST['message'],
request.POST.get('email', '[email protected]'), ['[email protected]'],)
return HttpResponseRedirect('/contact/thanks/')
return render_to_response('contact_form.html', { 'errors': errors }, context_instance=RequestContext(request))
Il mio problema è con l'ultima riga di questa funzione di visualizzazione. Viene chiamato solo se request.method! = POST. Questo mi sembra completamente sbagliato. Non dovrei chiamare "context_instance = RequestContext (request)" quando sta facendo un POST?