在表单

时间:2018-02-25 23:20:40

标签: ajax django html5 httprequest

我正在尝试创建一个简单的待办事项列表应用程序,该应用程序使用POST将数据发布到数据库中,然后使用' x' (\ u00D7)删除待办事项。代码如下:

Views.py

def delete(self, request, id):
    print(request.DELETE)
    self.model.objects.get(pk=request.delete['pk']).delete()
    return render(request, self.template_name, {'object_list':self.model.objects.all()})

Models.py

class TodoDB(models.Model):
todos = models.CharField(max_length=1000)
day = models.CharField(max_length=10)

def __str__(self):
    return str(self.todos)

HTML和JS

<ul class="list-group list-group-flush" id="list-group">
      {%for item in object_list%}
        <li class="list-group-item">{{item.todos}}</li>
      {%endfor%}
</ul>


for (var i = 0; i < close.length; i++) {
    close[i].onclick = function() {
      var li = this.parentElement;
      li.style.display = "none";
      $.ajax({
        type: 'DELETE',
        url: "{%url 'todo_list'%}",
        data:{'pk':pk},
        success: function(data){
          alert("Success!");
        },
        error: function(){
          alert("Error! Couldn't send delete request")
        }
      });
  }

任何帮助都会很棒。谢谢!

编辑:我忘了添加错误:错误是找不到csrf_token。我将整个列表放在新的表单标记下并在其中插入{%csrf_token%},但它仍然不接受该标记。

1 个答案:

答案 0 :(得分:0)

请考虑阅读 https://docs.djangoproject.com/en/2.0/ref/csrf/ 关于它如何在Django中组成。 简而言之,您需要在表单中呈现csrf标记,并在请求期间使用AJAX发布它。 你的错误正是如此。

data:{'pk':pk}, 在你的JS部分应该看起来像:

data:{
    'pk':pk,
    'csrf_token': [your rendered token here...]
},