Обработка запроса Ajax в Django без формы - PullRequest
0 голосов
/ 04 февраля 2019

У меня есть список вещей в моем html с ajax-запросом на передачу значения меры данных в views.py:

<ul>
   <li><a class="measure" href="#" data-measure="m_0001">Measure_0001</a></li>
   <li><a class="measure" href="#" data-measure="m_0002">Measure_0002</a></li>
   <li><a class="measure" href="#" data-measure="m_0003">Measure_0003</a></li>
</ul>

Javascript

$(".measure").click(function(){
var measure = {'measure': this.getAttribute("data-measure")};
$.ajax({
    url : "prueba/", // the endpoint
    type : "POST", // http method
    data : measure,

    success : function (data) {
         //Success 
    }
});

В этом файле views.py Я хочу получить значение для запроса в моей базе данных.

def prueba(request):
  response_data =  '{}'
  if request.user.is_authenticated:
    if request.method == 'POST':
      measure = request.POST.get('measure', None)
      //request to database

      return JsonResponse(response_data, safe=False)
    else:
      response_data =  '{"nothing to see": "this is not happening"}'
      return JsonResponse(response_data, safe=False)

Когда я нажимаю на элемент списка, у меня есть этоошибка:

" Запрещено (токен CSRF отсутствует или неверен. )"

Я не понимаю, где я должен поместить csrf_token, чтобы он работал.

Есть предложения?

1 Ответ

0 голосов
/ 04 февраля 2019

Добавьте скрытый элемент ввода внутри вашего ul тега со значением {{ csrf_token }}, например:

<ul>
  <input type='hidden' name='csrfmiddlewaretoken' value='{{ csrf_token }}' />        
  <!-- your list elements -->
</ul>

, а затем в вашем jQuery сделайте это:

$("ul .measure").on('click',function(){        
    var measure = {
        'measure': this.getAttribute("data-measure"),
        'csrfmiddlewaretoken': $('input[name=csrfmiddlewaretoken]').val()
       };
    // your ajax call
 });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...