使用Javascript XMLHttpRequest()进行csrf_令牌验证(403禁止)

使用Javascript XMLHttpRequest()进行csrf_令牌验证(403禁止),javascript,django,xmlhttprequest,django-csrf,Javascript,Django,Xmlhttprequest,Django Csrf,我试图向Django服务器发送XMLHttpRequest()post请求,但它显示403禁止, 搜索之后,我发现这是由于CSRF验证,在看到很多类似的内容之后,我仍然无法理解如何在XMLHttpRequest中实现CSRF 我包括了我正在使用的js代码段 document.addEventListener("DOMContentLoaded", () => { document.addEventListener('click',event => { if

我试图向Django服务器发送XMLHttpRequest()post请求,但它显示403禁止, 搜索之后,我发现这是由于CSRF验证,在看到很多类似的内容之后,我仍然无法理解如何在XMLHttpRequest中实现CSRF 我包括了我正在使用的js代码段

document.addEventListener("DOMContentLoaded", () => {

    document.addEventListener('click',event => {
        if (event.target.id === "add-cart-button")
        {   event.preventDefault();
            const add_cart_button_id = event.target.dataset.pid
            const item_class = event.target.dataset.type
            const item_name = event.target.dataset.item
            const size_chooser = `#${item_class}-size-${add_cart_button_id}`
            var sel = document.querySelector(size_chooser)
            const size = sel.value          
            const quantity_chooser = `#${item_class}-quantity-${add_cart_button_id}`
            const quantity = document.querySelector(quantity_chooser).value

            var request = new XMLHttpRequest()          
            request.open('POST','/addcart')

            request.onload = () => {
                const data = request.responseText
            }

            var data = new FormData()
            data.append('iten_class',item_class)
            data.append('item_name',item_name)
            data.append('size',size)
            data.append('quantity',quantity)
            request.send(data)

        }
    })

})
我将此请求发送到django服务器的/addcart路径

def addcart(request):
    return JsonResponse({'status':True})
只返回这个状态


有人能帮我进行csrf验证吗?

通常令牌作为请求头传递。您必须从页面中找到正确的令牌,然后将其设置为具有正确名称的XHR标题。为了在网页中放置csrf令牌,我必须首先从服务器检索它,我如何才能做到这一点,或者我只需写入{%csrf_token%}正如我们对表单所做的一样?阅读这些文档最有可能回答问题。文档是参考jQuery提供的,我对jQuery不熟悉。提供了您如何设置CSRF保护的信息,因此无法回答问题。在一般情况下(使用
{%csrf_token%}
将令牌放置在页面上),您可以通过
token=document.querySelector('[name=csrfmiddlewaretoken]')读取它。value
,然后(通过您自己的代码命名)设置头:
request.setRequestHeader('X-CSRFToken',token)。必须在打开请求之后和发送请求之前设置标头。