在没有表单元素的Django中使用ajax请求

Rob*_*ith 4 django ajax decorator

我想在不使用Django中的表单元素的情况下发送一个ajax请求(通过Jquery,虽然我认为这种情况无关紧要).根据文档,我应该可以通过使用ensure_csrf_cookie装饰器来做到这一点,但是,我得到了Error was: cannot import name ensure_csrf_cookie.

我正在使用以下导入from django.views.decorators.csrf import ensure_csrf_cookie.

我没有找到大量的文档ensure_csrf_cookie,所以任何帮助将不胜感激.

顺便说一句,使用@csrf_exempt按预期工作.

提前致谢.

Yuj*_*ita 8

ensure_csrf_cookie 如果你在导入它时遇到问题,那么它可能只是一个1.4 alpha的功能 - 我可以在trunk上使用相同的语句将其导入.

这里最简单的解决方案是在ajax调用本身中传递csrf_token VALUE.

你说你使用的是jQuery.

    $.ajax({
        url: "",
        type: 'POST',
        data: {
             csrfmiddlewaretoken: '{{ csrf_token }}' // just the token value
        },
        success: function(response) {
        }
    })
Run Code Online (Sandbox Code Playgroud)

看来这会ensure_csrf_cookie强制视图设置csrf cookie,这些cookie将在这里描述的jquery ajax调用的基于自动cookie的csrf保护机制中使用:https://docs.djangoproject.com/en/dev/ref/contrib/ CSRF /#阿贾克斯