from django.utils.cache import cache from django.http import HttpResponseForbidden def throttle_post(func, duration=15): def inner(request, *args, **kwargs): if request.method == 'POST': remote_addr = request.META.get('HTTP_X_FORWARDED_FOR') or \ request.META.get('REMOTE_ADDR') key = '%s.%s' % (remote_addr, request.get_full_path()) if cache.get(key): return HttpResponseForbidden('Try slowing down a little.') else: cache.set(key, 1, duration) return func(request, *args, **kwargs) return inner