Security Decorators Overview¶
DjangoAPI Guard's security decorators allow you to apply fine-grained security controls to individual views, complementing the global middleware protection. This gives you the flexibility to customize security policies on a per-endpoint basis.
What are Security Decorators?¶
Security decorators are Python decorators that you can apply to your Django view functions to add specific security measures. They work alongside the global DjangoAPIGuard middleware to provide layered protection.
from djangoapi_guard import SecurityConfig
from djangoapi_guard import SecurityDecorator
from django.http import JsonResponse
config = SecurityConfig()
guard_deco = SecurityDecorator(config)
def public_endpoint(request):
return JsonResponse({"message": "This uses global security settings"})
@guard_deco.rate_limit(requests=5, window=300)
@guard_deco.require_ip(whitelist=["10.0.0.0/8"])
def restricted_endpoint(request):
return JsonResponse({"message": "This has additional route-specific restrictions"})
Key Features¶
- Route-Level Controls: Apply security rules to specific endpoints
- Override Global Settings: Route decorators can override global middleware settings
- Stacking Support: Combine multiple decorators for comprehensive protection
- Behavioral Analysis: Monitor endpoint usage patterns and detect anomalies
- Content Filtering: Control request types and sizes per endpoint
- Time-Based Access: Restrict access to specific time windows
Decorator Categories¶
. Access Control¶
Control who can access your endpoints based on IP, geography, and cloud providers.
@guard_deco.require_ip(whitelist=["192.168.1.0/24"])
@guard_deco.block_countries(["CN", "RU"])
@guard_deco.block_clouds(["AWS", "GCP"])
def sensitive_endpoint(request):
return JsonResponse({"data": "restricted"})
. Authentication & Authorization¶
Enforce authentication requirements and secure headers.
@guard_deco.require_https()
@guard_deco.require_auth(type="bearer")
@guard_deco.api_key_auth(header_name="X-API-Key")
def authenticated_endpoint(request):
return JsonResponse({"data": "authenticated"})
. Rate Limiting¶
Apply custom rate limits to specific endpoints.
@guard_deco.rate_limit(requests=10, window=300) # 10 requests per 5 minutes
@guard_deco.geo_rate_limit({"US": (100, 3600), "CN": (5, 3600)})
def limited_endpoint(request):
return JsonResponse({"data": "rate limited"})
. Behavioral Analysis¶
Monitor and analyze user behavior patterns.
@guard_deco.usage_monitor(max_calls=50, window=3600, action="ban")
@guard_deco.return_monitor("win", max_occurrences=3, window=86400, action="alert")
def game_endpoint(request):
return JsonResponse({"result": "win", "reward": "rare_item"})
. Content Filtering¶
Control request content and format.
@guard_deco.content_type_filter(["application/json"])
@guard_deco.max_request_size(1024 * 1024) # 1MB limit
@guard_deco.require_referrer(["myapp.com"])
def upload_endpoint(request):
return JsonResponse({"status": "uploaded"})
. Advanced Features¶
Time-based controls and sophisticated detection mechanisms.
@guard_deco.time_window("09:00", "17:00", "UTC") # Business hours only
@guard_deco.suspicious_detection(enabled=True)
@guard_deco.honeypot_detection(["bot_trap", "hidden_field"])
def advanced_endpoint(request):
return JsonResponse({"data": "advanced protection"})
Basic Setup¶
. Initialize the Decorator¶
from djangoapi_guard import SecurityConfig
from djangoapi_guard import SecurityDecorator
from djangoapi_guard.middleware import DjangoAPIGuard
config = SecurityConfig(
enable_ip_banning=True,
enable_rate_limiting=True,
rate_limit=100,
rate_limit_window=3600
)
# Create decorator instance
guard_deco = SecurityDecorator(config)
. Apply Decorators to Views¶
from django.http import JsonResponse
@guard_deco.require_https()
@guard_deco.rate_limit(requests=5, window=300) # Stricter limit for login
@guard_deco.suspicious_detection(enabled=True)
def login(request):
# Login logic here
return JsonResponse({"token": "jwt_token"})
@guard_deco.require_ip(whitelist=["10.0.0.0/8"]) # Internal network only
@guard_deco.require_auth(type="bearer")
@guard_deco.time_window("09:00", "17:00", "UTC") # Business hours
def admin_panel(request):
return JsonResponse({"message": "Admin access granted"})
Configuration Priority¶
Security settings are applied in this order (highest to lowest priority):
- Decorator Settings - Route-specific configurations
- Global Middleware Settings - Application-wide defaults
- Built-in Defaults - Library defaults
Best Practices¶
. Logical Decorator Order¶
Apply decorators from most specific to most general:
@guard_deco.require_https() # Security requirement
@guard_deco.require_auth(type="bearer") # Authentication
@guard_deco.require_ip(whitelist=["10.0.0.0/8"]) # Access control
@guard_deco.rate_limit(requests=5, window=3600) # Rate limiting
@guard_deco.suspicious_detection(enabled=True) # Monitoring
def admin_endpoint(request):
return JsonResponse({"status": "admin action"})
Next Steps¶
- Access Control - IP filtering and geographic restrictions
- Authentication - HTTPS, auth requirements, and API keys
- Rate Limiting - Custom rate limits and geographic limits
- Behavioral Analysis - Usage monitoring and anomaly detection
- Content Filtering - Request validation and content controls
- Advanced Features - Time windows and sophisticated detection
For complete API reference, see the Security Decorators API Documentation.