我有一个名为投票的Django视图。它受@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/",
});
};
哪个成功发送到正确的网址。当我用firebug查看输出时,我发现我有500个错误。我已经将https://docs.djangoproject.com/en/dev/ref/contrib/csrf/#ajax中的剪辑包含在我的页面中,我认为这会解决CSRF问题,但似乎没有这样做。
想知道我是否遗漏了一些明显的东西!
谢谢!
答案 0 :(得分:0)
原来我解决这个问题的方法是整理上述内容:
var vote = function() {
pk = $(this).attr('pk');
data = {
'pk': pk
};
$.ajax({
type: "POST",
data: data,
url: "/link/" + pk + "/vote/",
});
};
如此整理,然后我检查了视图,发现它没有从ajax传递给它的DataDict中提取正确的值,这是500错误的来源。
由于CSRF问题我之前遇到过403,对于那些想知道如何解决这个问题的人,我只是使用上面问题中提到的脚本,保存在/ static / js /中的'csrf.js'文件中我的应用程序的目录,然后包含在其中一个脚本,然后解决了这个问题。