44 lines
1.2 KiB
Python
44 lines
1.2 KiB
Python
"""
|
|
Request ID Middleware
|
|
Generates unique request ID for every request and includes it in response headers
|
|
"""
|
|
import uuid
|
|
import logging
|
|
from django.utils.deprecation import MiddlewareMixin
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
class RequestIDMiddleware(MiddlewareMixin):
|
|
"""
|
|
Middleware that generates a unique request ID for every request
|
|
and includes it in response headers as X-Request-ID
|
|
"""
|
|
|
|
def process_request(self, request):
|
|
"""Generate or retrieve request ID"""
|
|
# Check if request ID already exists in headers
|
|
request_id = request.META.get('HTTP_X_REQUEST_ID') or request.META.get('X-Request-ID')
|
|
|
|
if not request_id:
|
|
# Generate new request ID
|
|
request_id = str(uuid.uuid4())
|
|
|
|
# Store in request for use in views/exception handlers
|
|
request.request_id = request_id
|
|
|
|
return None
|
|
|
|
def process_response(self, request, response):
|
|
"""Add request ID to response headers"""
|
|
# Get request ID from request
|
|
request_id = getattr(request, 'request_id', None)
|
|
|
|
if request_id:
|
|
# Add to response headers
|
|
response['X-Request-ID'] = request_id
|
|
|
|
return response
|
|
|
|
|