使用 ajax 调用后端的 django 有问题

django using ajax to call backend has problem

我是 Django 的新手。我想为我的博客创建喜欢的图标 post。这是我的 html 文件中的一个心形图标,我希望当我点击它时,它会变成红色,然后在后端调用一个函数来更改数据库中的一个数字并将新数字发送回模板,所有使用Ajax,是为了不在点赞post后刷新页面。我该怎么办,问题出在哪里?

在 html 文件中:

  <i class="fas fa-heart"></i>
  <b>{{ note.like }}</b>

脚本部分:

  <script>
    $(document).ready(function() {
        $('.fa-heart').click(function(e){
            this.style.color = this.style.color == 'red' ? 'white' : 'red';
            e.preventDefault();

                $.ajax({
                    type:'POST',
                    url:"vote/like/",
                    data:{
                        num:"niloofar",
                        //I think the problem is with this csrf token part
                        csrfmiddlewaretoken:$('input[name=csrfmiddlewaretoken]').val(),
                    },
                    success: function(data){
                        alert(data);
                    },
                    error : function() {
                        console.log("Error");
                    }
                });
        });
    });
  </script>

观看次数:

  def like(request):
      if request.method == 'POST':
        print(request.POST)
        return HttpResponse('done')

在urls.py中:

  path('<int:id>/vote/like/', views.like, name='like'),

错误是:

Internal Server Error: /notes/1/vote/like/ Traceback (most recent call last): File "/home/niloofar/git/djangoenv/lib/python3.9/site-packages/django/core/handlers/exception.py", line 47, in inner response = get_response(request) File "/home/niloofar/git/djangoenv/lib/python3.9/site-packages/django/core/handlers/base.py", line 181, in _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) TypeError: like() got an unexpected keyword argument 'id'

/1/vote/like/ 的请求将与列表中的 URL <int:id>/vote/like/ 匹配,Django 将调用函数 views.like(request, id=1) 但您的函数只接受单个参数,即 request 因此错误。

将您的函数 like 更改为类似下面的内容,然后它应该可以正常工作。

def like(request, id):
    ...

def like(request, *args, **kwargs):
    ...