from .models import AccessLog from django.conf import settings class AccessLogMiddleware: def __init__(self, get_response): self.get_response = get_response def __call__(self, request): response = self.get_response(request) if settings.DEBUG: return response user = getattr(request, "user", None) username = user.username if user and user.is_authenticated else "Anonymous" method = request.method path = request.get_full_path() ip_address = self.get_client_ip(request) AccessLog.objects.create( username=username, method=method, path=path, ip_address=ip_address ) return response def get_client_ip(self, request): x_forwarded_for = request.META.get("HTTP_X_FORWARDED_FOR") if x_forwarded_for: ip = x_forwarded_for.split(",")[0] else: ip = request.META.get("REMOTE_ADDR") return ip