Vous n'êtes pas identifié(e).
Bonjour.
J'ai un problème sur l'envoi de données en POST dans un formulaire très simple.
On me renvoi "Forbidden (403) CSRF verification failed. Request aborted." avec les trois reommandantion
The view function uses RequestContext for the template, instead of Context. ==> Fait
In the template, there is a {% csrf_token %} template tag inside each POST form that targets an internal URL. ==> Fait
If you are not using CsrfViewMiddleware, then you must use csrf_protect on any views that use the csrf_token template tag, as well as those that accept the POST data.==> Fait
Voici mon code :
dans settings.py
MIDDLEWARE_CLASSES = (
'django.middleware.csrf.CsrfViewMiddleware',
...)
dans views.py
def analyse(request):
data = {}
data.update(csrf(request))
t = loader.get_template('analyse.html')
c = RequestContext({
'data' : data,
})
return render_to_response("analyse.html", c)
dans index.html
<h1>{{Bonjour}}</h1>
<form action="/Webfiducia/analyse/" method="post">
{% csrf_token %}
<input type="text" name="adresse_a_scanner" id="adresse_a_scanner" value="la" />
<label for="adresse_a_scanner">Adresse a scanner</label><br />
<input type="submit" value="C'est parti !" />
</form>
et dans analyse.html
{% csrf_protect %}
<h1>{{data}}</h1>
Hors ligne
Bonjour,
essayez d'ajouter dans la section MIDDLEWARE_CLASSES du fichier settings :
'django.middleware.csrf.CsrfResponseMiddleware',
Hors ligne
Exacte pour pouvoir utiliser le crsf il faut que tu fasse appel aux deux Middlewares :
'django.middleware.csrf.CsrfViewMiddleware',
'django.middleware.csrf.CsrfResponseMiddleware',
Hors ligne
CsrfResponseMiddleware est deprecated depuis django 1.2, pour des
raisons de sécurité et puis parce que c'était un hack pas très propre.
Mettez à jour votre code, il n'y en a plus besoin.
En paraphrasant la doc [0] :
- Ajouter 'django.middleware.csrf.CsrfViewMiddleware' dans les
MIDDLEWARE_CLASSES. Pas de CsrfResponseMiddleware.
- Bien ajouter {% csrf_token %} dans ses formulaires
- Utiliser RequestContext ou le context processor à la main.
D'ailleurs tu fais les deux, un seul suffit.
Vu que c'est ce qui a été fait dès le mail initial, le problème est
ailleurs. En l'occurence, j'ai du mal à voir le lien entre les deux
templates, "index.html" et "analyse.html", ni ce que {% csrf_protect
%} vient faire dans un template.
Regarde dans la vue qui affiche index.html, elle n'utilise
probablement pas RequestContext ou le context processor. Afficher les
sources peut aider, on voit un <input> à la place du {% csrf_token %}.
[0] http://docs.djangoproject.com/en/1.3/ref/contrib/csrf/#how-to-use-it
On Fri, May 6, 2011 at 3:49 PM, sardon <ml _AT_ dadaprod.org> wrote:
> Bonjour,
>
> essayez d'ajouter dans la section MIDDLEWARE_CLASSES du fichier settings :
>
>
> 'django.middleware.csrf.CsrfResponseMiddleware',
>
> _______________________________________________
> django mailing list
> django _AT_ lists.afpy.org
> http://lists.afpy.org/mailman/listinfo/django
>
Hors ligne