Les formulaires utilisant la méthode POST doivent-ils avoir la protection CSRF? Je suis un livre et les exemples de code jettent 403 erreurs. J'ai fait quelques recherches et il semble que je devrais activer CSRF dans toutes mes formes.Django: le formulaire POST nécessite CSRF? GET ne pas?
Mes questions sont les suivantes:
Est-ce que Django exige maintenant que toutes les formes de POST soient protégés contre les CSRF?
Tout ce que je dois faire pour y arriver est d'ajouter 'django.middleware.csrf.CsrfViewMiddleware', retour render_to_response (modèle, dictionnaire, context_instance = RequestContext (demande), et ajouter '{% csrf_token%} dans le forme? suis-je manque quelque chose ici?
Quand je fais cela, la forme correspondante fonctionne très bien. Lorsque l'une de ces pièces sont manquantes, il ne parvient pas à 403. Je veux juste assurer que je fais DROIT. :)
Merci d'avance.
modifier:
Pour une raison quelconque ce code n'a pas de sens pour moi, mais il ne marche pas retourner toute erreur. S'il vous plaît ignorer la validation primitive car je ne suis pas arrivé à la section du livre où il montre la façon la plus efficace de le faire pour le moment.
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))
Mon problème est avec la toute dernière ligne de cette fonction de vue. Il est seulement appelé si request.method! = POST. Cela me semble complètement faux. Ne devrais-je pas appeler "context_instance = RequestContext (request)" quand il fait un POST?