django使用ajax PUT/DELETE方法请求报错解决:“forbidden (CSRF token missing or incorrect.)
报错解释:
这个错误表明你的AJAX PUT或DELETE请求被Django的跨站请求伪造(CSRF, Cross-Site Request Forgery)保护拦截了。原因是请求没有包含必须的CSRF令牌。
解决方法:
在你的AJAX请求中添加CSRF令牌。你可以通过Django的
{% csrf_token %}
模板标签获取CSRF令牌,并将它放到一个HTML表单中或者通过JavaScript获取。在JavaScript中,你可以这样做:
function getCookie(name) { let cookieValue = null; if (document.cookie && document.cookie !== '') { const cookies = document.cookie.split(';'); for (let i = 0; i < cookies.length; i++) { const cookie = cookies[i].trim(); // 确保cookie名称正确 if (cookie.substring(0, name.length + 1) === (name + '=')) { cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); break; } } } return cookieValue; } const csrftoken = getCookie('csrftoken');
然后在你的AJAX请求中设置CSRF令牌到HTTP头部:
$.ajax({ url: 'your-url', type: 'PUT', // 或者 'DELETE' headers: { 'X-CSRFToken': csrftoken }, // 其他AJAX设置... });
确保在发送请求之前获取了CSRF令牌,并且在AJAX请求中正确地将它添加到了X-CSRFToken
头部。这样就可以解决因为缺少CSRF令牌导致的Forbidden错误。
评论已关闭