2017-03-03 3 views
0

J'ai une fonction dans le fichier custom.js comme suit:jeton Django CSRF manque

function contactTraxio(fullname, telephone, email) { 
    if (typeof(fullname)==='undefined') fullname = null; 
    if (typeof(telephone)==='undefined') telephone = null; 
    if (typeof(email)==='undefined') email = null; 
    bootbox.dialog({ 
     title: "Limit reached", 
     message: '<p class="text-main text-center">You have reached the limit of your calculations.</p>' + 
       '<p class="pad-btm mar-btm text-center">Upgrade your account by contacting us on +32 9 111 12 12 or filling in the form below.</p>' + 
       '<div class="row"> ' + 
        '<div class="col-md-12"> ' + 
         '<form class="" method="POST"> ' + 

          '<div class="form-group"> ' + 
           '<div class="col-md-6" style="padding-left: 0"> ' + 
            '<input id="contact-fullname" name="fullname" type="text" placeholder="Your fullname" class="form-control input-md" value="' + fullname + '"> ' + 
            '<span class="help-block"><small></small></span> </div> ' + 
           '</div> ' + 
           '<div class="col-md-6" style="padding-right: 0"> ' + 
            '<input id="contact-telephone" name="telephone" type="text" placeholder="Telephone" class="form-control input-md" value="' + telephone + '"> ' + 
            '<span class="help-block"><small></small></span> </div> ' + 
           '</div> ' + 
           '<div class="col-md-12 pad-no-lr-md" style="margin-top: 7.5px;"> ' + 
            '<input id="contact-email" name="email" type="text" placeholder="Your email address" class="form-control input-md" value="' + email + '"> ' + 
            '<span class="help-block"><small></small></span> </div> ' + 
           '</div> ' + 
          '</div>' + 
         '</form> ' + 
        '</div>' + 
       '</div>', 
     buttons: { 
      success: { 
       label: "Send", 
       className: "btn-primary", 
       callback: function() { 
        $.ajax({ 
         type: 'POST', 
         url: '/master/contact_traxio/', 
         data: { 
          fullname: $('#contact-fullname').val(), 
          telephone: $('#contact-telephone').val(), 
          email: $('#contact-email').val(), 
          csrfmiddlewaretoken: '{{ csrf_token }}' 
         }, 
         success: function (data) { 
          debugger; 
         } 
        }); 


       } 
      } 
     } 
    }); 
} 

Ainsi, j'ai un formulaire de contact js. Et j'essaye d'envoyer les données de forme à la vue de django avec ajax.

J'ai ajouté csrfmiddlewaretoken: '{{ csrf_token }}' aux données, mais pour une raison quelconque, je reçois une erreur:

Forbidden (CSRF token missing or incorrect.): /master/contact_traxio/ 
[03/Mar/2017 08:52:46] "POST /master/contact_traxio/ HTTP/1.1" 403 2502 

La vue contact_traxio se présente comme suit:

@login_required 
def contact_traxio(request): 
    if request.method == 'POST': 
     # Just test 
     return HttpResponse('{}/{}/{}'.format(request.POST['fullname'], request.POST['telephone'], request.POST['email'])) 
    else: 
     return HttpResponseBadRequest("Sorry. Something went wrong.") 

Et le modèle de django d'où je appeler la fonction contactTraxio est la suivante:

{% block page_content %} 
    <script> 
     $(document).ready(function() { 
      var fullname = '{{ user.user.first_name }} {{ user.user.last_name }}'; 
      contactTraxio(fullname, '{{ user.telephone }}', '{{ user.user.email }}') 
     }) 
    </script> 
{% endblock %} 

Pourquoi i s le jeton csrf n'est pas envoyé?

Un conseil?

Répondre

2

Vous utilisez la syntaxe du modèle Django dans un fichier JS externe. Cela ne peut pas fonctionner, car Django n'analyse pas ces fichiers.

La documentation montre exactly what you need to do pour accéder au jeton depuis votre JS; vous devriez le suivre.