使用Javascript XMLHttpRequest()进行csrf_令牌验证(403禁止)
我试图向Django服务器发送XMLHttpRequest()post请求,但它显示403禁止, 搜索之后,我发现这是由于CSRF验证,在看到很多类似的内容之后,我仍然无法理解如何在XMLHttpRequest中实现CSRF 我包括了我正在使用的js代码段使用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
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)代码>。必须在打开请求之后和发送请求之前设置标头。