我可以通过我的AJAX帖子使用一些符合Django的CSRF保护机制的帮助.我按照这里的指示:
http://docs.djangoproject.com/en/dev/ref/contrib/csrf/
我已经完全复制了他们在该页面上的AJAX示例代码:
http://docs.djangoproject.com/en/dev/ref/contrib/csrf/#ajax
我getCookie('csrftoken')在xhr.setRequestHeader打电话之前打印了一个警告打印内容,确实填充了一些数据.我不确定如何验证令牌是否正确,但我鼓励它发现并发送一些东西.
但是Django仍然拒绝我的AJAX帖子.
这是我的JavaScript:
$.post("/memorize/", data, function (result) {
    if (result != "failure") {
        get_random_card();
    }
    else {
        alert("Failed to save card data.");
    }
});
这是我从Django看到的错误:
[23/Feb/2011 22:08:29]"POST/memorize/HTTP/1.1"403 2332
我确定我错过了一些东西,也许这很简单,但我不知道它是什么.我一直在搜索SO,并看到一些关于通过csrf_exempt装饰器关闭CSRF检查我的视图的信息,但我发现它没有吸引力.我已经试过了,但它确实有效,但我宁愿让我的POST以Django的设计方式工作,如果可能的话.
为了防止它有用,这里是我的观点的主旨:
def myview(request):
    profile = request.user.profile
    if request.method == 'POST':
        """
        Process the post...
        """
        return HttpResponseRedirect('/memorize/')
    else: # request.method == 'GET'
        ajax = request.GET.has_key('ajax')
        """
        Some irrelevent code...
        """
        if ajax:
            response = HttpResponse()
            profile.get_stack_json(response)
            return response
        else:
            """
            Get …