From 043175c3fb797201a79953608c9675131b4d4657 Mon Sep 17 00:00:00 2001 From: Joseph Kocherhans Date: Mon, 6 Mar 2006 22:30:18 +0000 Subject: [PATCH] magic-removal: moved request.user handling out of django.core.handlers git-svn-id: http://code.djangoproject.com/svn/django/branches/magic-removal@2490 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- django/conf/global_settings.py | 1 + django/contrib/auth/middleware.py | 42 ++++++++++++++++++++----------- django/core/handlers/modpython.py | 9 ------- django/core/handlers/wsgi.py | 9 ------- 4 files changed, 28 insertions(+), 33 deletions(-) diff --git a/django/conf/global_settings.py b/django/conf/global_settings.py index 26e6afe7ac..b47f5ea0a5 100644 --- a/django/conf/global_settings.py +++ b/django/conf/global_settings.py @@ -207,6 +207,7 @@ TRANSACTIONS_MANAGED = False # response phase the middleware will be applied in reverse order. MIDDLEWARE_CLASSES = ( "django.contrib.sessions.middleware.SessionMiddleware", + "django.contrib.auth.middleware.AuthenticationMiddleware", # "django.middleware.http.ConditionalGetMiddleware", # "django.middleware.gzip.GZipMiddleware", "django.middleware.common.CommonMiddleware", diff --git a/django/contrib/auth/middleware.py b/django/contrib/auth/middleware.py index 9c49216c62..cd4254b9b5 100644 --- a/django/contrib/auth/middleware.py +++ b/django/contrib/auth/middleware.py @@ -1,18 +1,30 @@ -# TODO: this will be replaced by the muti-auth stuff -class UserSource: - def get_user(self, request): - from django.contrib.auth.models import User, SESSION_KEY +class UserWrapper(object): + """ + Proxy to lazily load a user object. + """ + def __init__(self, login): + self._login = login + self._cached_user = None + + def _get_user(self): + from django.contrib.auth.models import User + if not self._cached_user: + self._cached_user = User.objects.get(pk=self._login) + return self._cached_user + + _user = property(_get_user) + + def __getattr__(self, name): + return getattr(self._user, name) + +class AuthenticationMiddleware: + def process_request(self, request): + from django.contrib.auth.models import SESSION_KEY + assert hasattr(request, 'session'), "The Django authentication middleware requires session middleware to be installed. Edit your MIDDLEWARE_CLASSES setting to insert 'django.contrib.sessions.middleware.SessionMiddleware'." try: user_id = request.session[SESSION_KEY] - if not user_id: - raise ValueError - user = User.objects.get(pk=user_id) - except (AttributeError, KeyError, ValueError, User.DoesNotExist): - from django.parts.auth import anonymoususers - user = anonymoususers.AnonymousUser() - return user - -class RequestUserMiddleware: - def process_request(self, request): - request._user_source = UserSource() + request.user = UserWrapper(user_id) + except KeyError: + from django.parts.auth.anonymoususers import AnonymousUser + request.user = AnonymousUser() return None diff --git a/django/core/handlers/modpython.py b/django/core/handlers/modpython.py index 6061dce677..825a93fccf 100644 --- a/django/core/handlers/modpython.py +++ b/django/core/handlers/modpython.py @@ -98,14 +98,6 @@ class ModPythonRequest(http.HttpRequest): self._raw_post_data = self._req.read() return self._raw_post_data - def _get_user(self): - if not hasattr(self, '_user'): - self._user = self._user_source.get_user(self) - return self._user - - def _set_user(self, value): - self._user = value - GET = property(_get_get, _set_get) POST = property(_get_post, _set_post) COOKIES = property(_get_cookies, _set_cookies) @@ -113,7 +105,6 @@ class ModPythonRequest(http.HttpRequest): META = property(_get_meta) REQUEST = property(_get_request) raw_post_data = property(_get_raw_post_data) - user = property(_get_user, _set_user) class ModPythonHandler(BaseHandler): def __call__(self, req): diff --git a/django/core/handlers/wsgi.py b/django/core/handlers/wsgi.py index 17cd971333..0299ed8e2a 100644 --- a/django/core/handlers/wsgi.py +++ b/django/core/handlers/wsgi.py @@ -119,21 +119,12 @@ class WSGIRequest(http.HttpRequest): self._raw_post_data = self.environ['wsgi.input'].read(int(self.environ["CONTENT_LENGTH"])) return self._raw_post_data - def _get_user(self): - if not hasattr(self, '_user'): - self._user = self._user_source.get_user(self) - return self._user - - def _set_user(self, value): - self._user = value - GET = property(_get_get, _set_get) POST = property(_get_post, _set_post) COOKIES = property(_get_cookies, _set_cookies) FILES = property(_get_files) REQUEST = property(_get_request) raw_post_data = property(_get_raw_post_data) - user = property(_get_user, _set_user) class WSGIHandler(BaseHandler): def __call__(self, environ, start_response):