Javascript 如果脚本位于静态文件夹中,则csrf变量无效
javascript:Javascript 如果脚本位于静态文件夹中,则csrf变量无效,javascript,ajax,django,django-templates,Javascript,Ajax,Django,Django Templates,javascript: $('.delete').click(function() { if (confirm("Are you sure to delete?")) { var csrf_token = $("#csrf_token").val(); $.ajax({ // create an AJAX call... data:{ csrfmidd
$('.delete').click(function() {
if (confirm("Are you sure to delete?")) {
var csrf_token = $("#csrf_token").val();
$.ajax({ // create an AJAX call...
data:{
csrfmiddlewaretoken: ('{{csrf_token}}'),
delete:true
},
type:'POST',
url: '/feed_list/',
cache:false,
success: function() {
window.location.href = window.location;
}
});
return false;
}
});
这是我的java脚本函数,用于调用views.py中执行删除函数的方法。删除函数工作正常,问题是此javascript函数现在位于当前html页面中。如果我将此函数移动到静态文件夹-->scripts-->custom.js,将抛出403错误页。
CSRF验证失败。请求中止。
我正在以java脚本的形式传递csrf令牌。我想解决这个问题。需要建议 它不会工作,因为django服务器不会呈现js文件。
以下是解决此问题的方法:
添加jquery插件:
在js文件中使用此选项可获取csrf令牌:
csrfmiddlewaretoken: $.cookie('csrftoken'),
您已经定义了
csrf\u令牌
,因此需要在ajax请求中传递它:
data:{
csrfmiddlewaretoken: csrf_token,
delete:true
}
但我不知道您的输入是什么样子的,我将令牌定义为
token = $('input[name="csrfmiddlewaretoken"]').val()
在基本模板中传递{%csrf_token%}
哪个html代码:
<input type="hidden" name="csrfmiddlewaretoken" value="your_token">
但是如果我将js移动到静态文件夹,其他页面中的脚本可以工作,问题是有两个页面。@user2439275可能其他脚本没有使用模板标记。@DanielRoseman这意味着答案是完美的解决方案,除了这是不可能的@user2439275我的解决方案有帮助吗?如果没有,请解释错误