from django.http import HttpResponseRedirect from django.conf import settings from re import compile from django.core.urlresolvers import reverse EXEMPT_URLS = [reverse('login'),reverse('logout')] if hasattr(settings, 'LOGIN_EXEMPT_URLS'): EXEMPT_URLS += settings.LOGIN_EXEMPT_URLS """ Middleware that requires a user to be authenticated to view any page other than LOGIN_URL. Exemptions to this requirement can optionally be specified in settings via a list of regular expressions in LOGIN_EXEMPT_URLS (which you can copy from your urls.py). Requires authentication middleware and template context processors to be loaded. You'll get an error if they aren't. """ class LoginRequiredMiddleware(object): def __init__(self, get_response): self.get_response = get_response def __call__(self, request): if not request.user or not request.user.is_authenticated(): path = request.path_info if path not in EXEMPT_URLS: login_uri = '%s?next=%s' % (settings.LOGIN_URL, request.path_info) return HttpResponseRedirect(login_uri) return self.get_response(request)