from django.http import Http404
def require_xhr():
    """
    Decorator to make a view only accept requests from AJAX calls. Usage::

        @require_xhr()
        def my_view(request):
            # Returns data
            # ...
    """
    def decorator(func):
        def inner(request, *args, **kwargs):
            if request.META.get('HTTP_X_REQUESTED_WITH') != 'XMLHttpRequest':
                raise Http404
            return func(request, *args, **kwargs)
        return inner
    return decorator
