43 votes

Django renvoie une erreur 403 lors de l'envoi d'une requête POST

lorsque j'utilise le code Python suivant pour envoyer une requête POST à mon site Web Django, j'obtiens 403 : Erreur interdite.

 url = 'http://www.sub.domain.com/'
values = { 'var': 'test' }

try:
    data = urllib.urlencode(values, doseq=True)
    req = urllib2.Request(url, data)
    response = urllib2.urlopen(req)
    the_page = response.read()
except:
    the_page = sys.exc_info()
    raise

Lorsque j'ouvre un autre site Web, cela fonctionne correctement. domain.com est également le site Web de Django, et il fonctionne également correctement. Je pense que c'est un problème de configuration de Django, quelqu'un peut-il me dire ce que je dois faire pour donner accès à mon script ?

32voto

Joe J Points 2578

La vue que vous publiez contient-elle un formulaire Django ? Si c'est le cas, je me demande si cela donne une erreur csrf. Je pense que cela se manifeste par un 403. Dans ce cas, vous devrez ajouter la balise {{ csrf_token }}. Juste une pensée.

4voto

Hiro Points 1516

La réponse est 403 car django nécessite un jeton csrf (inclus dans les données de publication) dans chaque requête POST que vous effectuez.

Il existe différentes manières de procéder telles que :

L'acquisition du jeton à partir du cookie et la méthode ont été expliquées dans l'article entrez la description du lien ici

ou

Vous pouvez y accéder depuis DOM en utilisant {{ csrf_token }}, disponible dans le modèle

Alors maintenant en utilisant la deuxième méthode:

 var post_data = {
  ...
  'csrfmiddlewaretoken':"{{ csrf_token }}"
  ...
}

$.ajax({
  url:'url',
  type:'POST'
  data:post_data,
  success:function(data){
    console.log(data);
  },
  error:function(error){
    console.log(error);
  }
});

0voto

polarise Points 170

La documentation de Django fournit plusieurs façons de s'assurer que les jetons CSRF sont inclus. Voir https://docs.djangoproject.com/en/1.11/ref/csrf/ pour plus de détails.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X