一尘不染

在不带表单元素的Django中使用Ajax请求

ajax

我想发送一个ajax请求(通过Jquery,尽管我认为在这种情况下不相关),而不在Django中使用form元素。根据文档,我应该可以通过使用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按预期方式工作。

提前致谢。


阅读 269

收藏
2020-07-26

共1个答案

一尘不染

ensure_csrf_cookie 如果您在导入时遇到困难,它可能仅是1.4 alpha功能-我可以在树干上使用相同的语句很好地导入它。

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

您说您正在使用jQuery。

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

看来这ensure_csrf_cookie迫使视图设置csrf cookie,该csrf
cookie在基于自动cookie的csrf保护机制中使用,对于此处描述的jquery
ajax调用是必需的:https
://docs.djangoproject.com/en/dev/ref/contrib/ csrf
/#ajax

2020-07-26