Using ajax request in Django without form element

ajax, decorator, django

Solution

`ensure_csrf_cookie` may only be a 1.4 alpha feature if you're having trouble importing it -- I can import it just fine with the same statement on trunk.

The simplest solution here is to pass the csrf_token VALUE in the ajax call itself.

You said you were using jQuery.

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

It appears this `ensure_csrf_cookie` forces the view to set the csrf cookie that would be required for use in the automatic cookie based csrf protection mechanism for jquery ajax calls described here: https://docs.djangoproject.com/en/dev/ref/contrib/csrf/#ajax

Problem

I'd like to send an ajax request (via Jquery, although I think that's irrelevant in this situation) without using a form element in Django. According to the documentation, I should be able to do that by using the `ensure_csrf_cookie` decorator, however, I get `Error was: cannot import name ensure_csrf_cookie`. I'm using the following import `from django.views.decorators.csrf import ensure_csrf_cookie`. I didn't find a great deal of documentation about `ensure_csrf_cookie`, so any help will be greatly appreciated. By the way, using `@csrf_exempt` works as expected. Thanks in advance.

Original source