在Django中处理Ajax请求(不带表单)

时间:2019-02-04 15:55:29

标签: javascript python ajax django backend

我的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 :(得分:0)

c标记内添加一个隐藏的输入元素,其值为var firstNonRepeatedCharacter = function(string) { var count = {}; for (var i = 0; i < string.length; i++) { var letter = string[i]; if (!count[letter]) { count[letter] = 1; } else { count[letter]++; } } for (var letter in count) { if (count[letter] === 1) { return letter; } } return null; } var someString = 'aabcbd'; console.log(firstNonRepeatedCharacter(someString));,如下所示:

ul

,然后在您的jQuery中执行以下操作:

{{ csrf_token }}