Кроме того, эта ошибка 403 возникает, когда минимальная длина ввода 3 соблюдается в элементе управления select2.

я есть следующая функция ajax, которая выдает мне ошибку токена запроса подделки межсайтового пространства, когда я превышаю минимальную длину ввода 3 с помощью элемента select2. Зная это, я попытался добавить {csrfmiddlewaretoken: '{{csrf_token}}'} к своим данным :. После добавления токена csrfmiddlewaretoken я по-прежнему получаю токен CSRF, который отсутствует или содержит ошибку. Я полагаю, что это как-то связано с функцией my для searchFilter и searchPage. Как правильно это сделать?

// using jQuery
function getCookie(name) {
    var cookieValue = null;
    if (document.cookie && document.cookie !== '') {
        var cookies = document.cookie.split(';');
        for (var i = 0; i < cookies.length; i++) {
            var cookie = jQuery.trim(cookies[i]);
            // Does this cookie string begin with the name we want?
            if (cookie.substring(0, name.length + 1) === (name + '=')) {
                cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                break;
            }
        }
    }
    return cookieValue;
}
var csrftoken = getCookie('csrftoken');

$(document).ready(function () {
    $('.selectuserlist').select2({
      minimumInputLength: 3,
      allowClear: true,
      placeholder: {
        id: -1,
        text: 'Enter the 3-4 user id.',
      },
      ajax: {
        type: 'POST',
        url: '',
        contentType: 'application/json; charset=utf-8',
        async: false,
        dataType: 'json',
        data: { csrfmiddlewaretoken: csrftoken },

        function(params) {
          return "{'searchFilter':'" + (params.term || '') + "','searchPage':'" + (params.page || 1) + "'}";
        },

        processResults: function (res, params) {
            var jsonData = JSON.parse(res.d);
            params.page = params.page || 1;
            var data = { more: (jsonData[0] != undefined ? jsonData[0].MoreStatus : false), results: [] }, i;
            for (i = 0; i < jsonData.length; i++) {
              data.results.push({ id: jsonData[i].ID, text: jsonData[i].Value });
            }

            return {
              results: data.results,
              pagination: { more: data.more,
              },
            };
          },
      },
    });

  });

На мой взгляд, есть метод POST и csrf_token.

  {% block content %}
  <form action = "{% url 'multiresult' %}" form method = "POST">
      {% csrf_token %}
  {% block extra_js %}
      {{ block.super }}
      {{ form.media }}

Ответ из консоли:

Запрещено (токен CSRF отсутствует или неверен.): / Search / multisearch / [29 / Mar / 2018 09:14:52] "POST / search / multisearch / HTTP / 1.1" 403 2502

Ответы на вопрос(2)

Ваш ответ на вопрос