Django Integration

RateThrottle provides Django middleware and decorators for seamless integration.

Installation

pip install ratethrottle[django]

Quick Start

Add to MIDDLEWARE in settings.py:

MIDDLEWARE = [
    # ... other middleware
    'ratethrottle.middleware.DjangoRateLimitMiddleware',
]

# Configure rate limiting
RATELIMIT_STORAGE = 'redis://localhost:6379/0'
RATELIMIT_ENABLE = True

Usage

Using the Decorator

from django.http import JsonResponse
from ratethrottle import django_ratelimit

@django_ratelimit(limit=100, window=60)
def my_view(request):
    return JsonResponse({'data': 'value'})

@django_ratelimit(limit=50, window=60, scope='user')
def protected_view(request):
    return JsonResponse({'data': 'protected'})

Configuration

Settings

Add to your Django settings.py:

# Rate limiting settings
RATELIMIT_ENABLE = True
RATELIMIT_STORAGE = 'redis://localhost:6379/0'
RATELIMIT_DEFAULT_LIMIT = 100
RATELIMIT_DEFAULT_WINDOW = 60
RATELIMIT_STRATEGY = 'sliding_window'

Complete Example

# views.py
from django.http import JsonResponse
from ratethrottle import django_ratelimit

@django_ratelimit(limit=100, window=60)
def api_view(request):
    return JsonResponse({
        'message': 'API endpoint',
        'data': []
    })

@django_ratelimit(limit=1000, window=3600, scope='user')
def user_view(request):
    return JsonResponse({
        'user': request.user.username,
        'data': 'user-specific'
    })

Next Steps