Использование ajax-запроса в Django без элемента формы - PullRequest
4 голосов
/ 05 ноября 2011

Я хотел бы отправить ajax-запрос (через Jquery, хотя я думаю, что это не имеет значения в этой ситуации) без использования элемента формы в Django.Согласно документации , я смогу сделать это с помощью декоратора 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 работает как положено.

Заранее спасибо.

Ответы [ 2 ]

8 голосов
/ 05 ноября 2011

ensure_csrf_cookie может быть только альфа-функцией 1.4, если у вас возникли проблемы с ее импортом - я могу просто отлично импортировать ее с тем же оператором для транка.

Самое простое решение здесь - передатьcsrf_token VALUE в самом вызове ajax.

Вы сказали, что используете jQuery.

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

Кажется, это ensure_csrf_cookie заставляет представление установить файл cookie csrf, который потребуется для использованияв механизме защиты csrf на основе автоматического cookie для вызовов jquery ajax, описанных здесь: https://docs.djangoproject.com/en/dev/ref/contrib/csrf/#ajax

1 голос
/ 05 ноября 2011

Вы правы - это похоже на ошибку в документации.Вы должны иметь возможность использовать csrf_exempt (та же страница документации).

...