Login

Ajax required decorator

Author:
zenx
Posted:
May 23, 2008
Language:
Python
Version:
.96
Score:
5 (after 7 ratings)

Checks if the request is an AJAX request, if not it returns an HttpResponseNotFound. It looks for the XMLHttpRequest value in the HTTP_X_REQUESTED_WITH header. Major javascript frameworks (jQuery, etc.) send this header in every AJAX request.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
from django.http import HttpResponseBadRequest

def ajax_required(f):
    """
    AJAX request required decorator
    use it in your views:

    @ajax_required
    def my_view(request):
        ....

    """    
    def wrap(request, *args, **kwargs):
            if not request.is_ajax():
                return HttpResponseBadRequest()
            return f(request, *args, **kwargs)
    wrap.__doc__=f.__doc__
    wrap.__name__=f.__name__
    return wrap

More like this

  1. Template tag - list punctuation for a list of items by shapiromatron 9 months ago
  2. JSONRequestMiddleware adds a .json() method to your HttpRequests by cdcarter 9 months, 1 week ago
  3. Serializer factory with Django Rest Framework by julio 1 year, 4 months ago
  4. Image compression before saving the new model / work with JPG, PNG by Schleidens 1 year, 4 months ago
  5. Help text hyperlinks by sa2812 1 year, 5 months ago

Comments

AdamKG (on May 23, 2008):

Might want to check out request.is_ajax(). It does essentially the same thing; it'd just change line 14.

#

kioopi (on May 24, 2008):

Maybe returning a HTTP-Code in the 400 range ('Bad Request') would be more appropiate?

#

jeffsim (on May 29, 2008):

Thanks for the snippet.

I agree that you could replace request.META.get with request.is_ajax() and return a HttpResponseBadRequest instead, however this is still a very useful snippet!

#

zenx (on May 31, 2008):

I've updated the code with your recommendations. Thank you!

#

mike8 (on May 25, 2010):

You have to make a instance of HttpResponseBadRequest.

#

Please login first before commenting.