如何不使用jQuery为Ajax请求添加CSRF令牌

时间:2019-07-22 10:07:08

标签: javascript django ajax csrf

我想使用Ajax请求将一些数据从javascript文件发送到Django应用中的views文件。但是,由于我不熟悉jQuery,并且现在不添加CSRF令牌,因此我仅使用Javascript做此操作。

这是我的Javascript代码:

    const request = new XMLHttpRequest();
        request.open("POST", "/list");
    var csrftoken = Cookies.get('csrftoken');

    let data = {
        items: JSON.stringify(items)
    }
    request.setRequestHeader( 'X-CSRF-TOKEN', csrftoken);
    request.send(data);

我尝试使用Cookies.get('csrftoken')getCSRFTokenValue(),但不确定如何在获得令牌后发送令牌。

在开发人员控制台中,它显示:Failed to load resource: the server responded with a status of 403 (Forbidden)

2 个答案:

答案 0 :(得分:0)

添加此内容:

function (xhr, settings) {
                      var csrftoken = Cookies.get('csrftoken');
                      function csrfSafeMethod(method) {
                          // these HTTP methods do not require CSRF protection
                          return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
                      }
                      if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
                          xhr.setRequestHeader("X-CSRFToken", csrftoken);
                      }

答案 1 :(得分:0)

如果其中没有表单标签,则必须添加csrf_token,因此必须在视图之前添加装饰器

@csrf_exempt 
Def your_view(request):