django+ajax+post出现csrftoken错误?

这是我查阅的官方文档

为什么会出现csrf错误呢?我在data参数里面加入了csrf啊?

    Forbidden (CSRF token missing or incorrect.): /account/test/
    [20/Oct/2016 18:10:44] "POST /account/test/ HTTP/1.1" 403 2274

ajax代码 var csrftoken = Cookies.get('csrftoken');这里很诡异

    function doTest() {
        // 这里是按照官方文档写的,不是太明白,如果加入这一句话post表单根本就不会提交
        //var csrftoken = Cookies.get('csrftoken');
        $.ajax({
            type: "POST",
            url: "/account/test/",
            
            // 这里可能有一点问题,但是要用csrf所以没有调用JSON.stringify(),
            // 这里我应该如何处理呢?
            data: {name: 'john', csrfmiddlewaretoken: '{{ csrf_token  }}'},
            
            contentType : 'application/json; charset=utf-8',
            dataType: "json",
            success: function(json) {
                alert('success');
           }
        });
    }
    

django代码 


def diff_response(request):
    if request.method == 'POST':
        # data = json.loads(request.body.decode('utf-8'))
        # print data['name']
        print request.body
    json_data = [{'name': 'tom', 'id': '1'},
                 {'name': 'mike', 'id': '2'}]
    return HttpResponse(json.dumps(json_data, ensure_ascii=False))
    

调用ajax

<input type="submit" id="test-json" onclick="doTest()" value="test-json"/>
阅读 9.6k
2 个回答

你再试一下在视图加装饰器。

from django.views.decorators.csrf import csrf_exempt

@csrf_exempt
def diff_response(request):
    pass
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题