我有一个 Django View ,名为投票。它受到 @login_required 装饰器的保护,在正常使用中完全可以正常工作。
我认为开始研究 ajax 和 javascript 以使系统更加动态是一个值得的想法,因此我在第一次尝试中实现了如下所示的内容:
$(function() {
$(".vote").click(vote);
});
var vote = function() {
pk = $(this).attr('pk');
$.ajax({
type: "POST",
data: "pk=" + $(this).attr("pk"),
url: "/link/" + $(this).attr("pk") + "/vote/",
});
};
成功 POSTS 到正确的 URL。当我使用 firebug 查看输出时,我发现出现了 500 个错误。我已经包含了从 https://docs.djangoproject.com/en/dev/ref/contrib/csrf/#ajax 中截取的内容进入我的页面,我原以为这可以解决 CSRF 问题,但似乎没有这样做。
想知道我是否遗漏了一些明显的东西!
谢谢!
最佳答案
事实证明我解决这个问题的方法是整理上面的内容:
var vote = function() {
pk = $(this).attr('pk');
data = {
'pk': pk
};
$.ajax({
type: "POST",
data: data,
url: "/link/" + pk + "/vote/",
});
};
整理完毕后,我检查了 View ,发现它没有从 ajax 传递给它的 DataDict 中提取出正确的值,这就是 500 错误的来源。
我之前遇到过由于 CSRF 问题而导致的 403 错误,对于那些想知道如何解决这个问题的人,我只是使用了上面问题中提到的脚本,保存在/static/js/中的“csrf.js”文件中我的应用程序的目录,然后将其包含为脚本之一,然后解决了该问题。
关于javascript - Django ajax查看csrf失败并出现500错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6637099/