2017-09-19 17 views
0

Lorsque j'essaie l'ajax dans la même page pour le html cela fonctionne. Comme ça;Django 403 Erreur Interdite

<html> 
    <head> 
    ... 
    </head> 
    <body> 
    .... 
    <script> 

    $.ajax({ 
     url: /test/, 
     method: 'POST', 
     headers: {'X-CSRFToken': '{{ csrf_token }}'}, 
     data: { name: a, surname: b}, 
     dataType: 'json', 
     success: function (data) { 
      getList(data); 
     } 
    }); 
    </script> 
    </body> 
</html> 

Lorsque j'essaie l'appel même javascript comme externe. Ça ne marche pas. Pourquoi?

<html> 
    <head> 
    ... 
    </head> 
    <body> 
    .... 
    <script src="{% static 'js/test.js' %}"></script> 
    </body> 
</html> 
+0

Êtes-vous configurer le fichier statique correctement dans django? –

+0

fichier statique correctement configuré. J'ai 403 erreur. – Halim

+0

[Les docs ont une solution pour cela] (https://docs.djangoproject.com/fr/1.11/ref/csrf/#setting-the-token-on-the-ajax-request) qui ajoute automatiquement le jeton CSRF à tous les appels AJAX. – dspacejs

Répondre

2

Définir le {{ csrf_token }} comme une variable globale dans votre page HTML dans script tag comme une variable globale en tant que telle: -

var generated_csrf_token = "{{ csrf_token }}"; 

Et puis dans votre .js fichier appeler,

headers: {'X-CSRFToken': generated_csrf_token}, 

Mais assurez-vous de mettre l'appel AJAX dans la fonction prêt pour le document $(document).ready(function() {***here***}

De cette façon, vous pouvez y accéder avec le nom generated_csrf_token dans n'importe quel fichier js.

Espérons que cela aide :-)

+1

Merci. C'est du travail. – Halim