Django 2: csrfmiddlewaretoken в URL при ответном ударе - PullRequest
0 голосов
/ 14 марта 2019

У меня есть домашняя страница, разделенная на два раздела, где в одном из них у меня есть форма, которую пользователь может заполнить и отправить. Отправка формы должна обновлять только div, который содержит эту форму. Для этого я использую AJAX, как показано ниже.

Все работает отлично, за исключением случаев, когда я отвечаю после отправки формы. csrfmiddlewaretoken появляется в URL как параметр. Есть идеи, если это нормально? Как я могу предотвратить это?

Форма:

<form id="post-form">
  {% csrf_token %}
  <fieldset>
    <legend>Facebook Login</legend>
    <div class="form-group">
      <label for="InputName">Name</label>
      <input type="text" class="form-control" placeholder="name">
    </div>
    <button type="submit" class="btn btn-primary">Submit</button>
  </fieldset>
</form>

AJAX-скрипт:

<script src="{% static "vendor/jquery/jquery.min.js" %}"></script>
<script src="{% static "vendor/bootstrap/js/bootstrap.bundle.min.js" %}"></script>
<script src="https://cdn.jsdelivr.net/npm/js-cookie@2/src/js.cookie.min.js"></script>
<script>
  var csrftoken = Cookies.get('csrftoken');
  function csrfSafeMethod(method) {
    // these HTTP methods do not require CSRF protection
    return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
  }
  $.ajaxSetup({
    beforeSend: function(xhr, settings) {
      if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
        xhr.setRequestHeader("X-CSRFToken", csrftoken);
      }
    }
  });
</script>


<script type="text/javascript">
    $('#post-form').on('submit',function(event){
        event.preventDefault();
        console.log("form submitted!");  // sanity check
    $.ajax({
      type:'POST',
      url:'{% url 'test:test_url' %}',
      data:{
        Name:$('#InputName').val(),
      },
      success:function(context){
        $('#post-form').html(context);

      }
    });
    });
</script>
...