Не могли бы вы объяснить мне, как работает "django.contrib.auth"? - PullRequest
0 голосов
/ 06 мая 2011

Я работаю над модулем аутентификации, черпая вдохновение и заменяя "django.contrib.auth".

Что они делают со всем этим и почему?

def get_user(request):
  from django.contrib.auth.models import AnonymousUser
  try:
    user_id = request.session[SESSION_KEY]
    backend_path = request.session[BACKEND_SESSION_KEY]
    backend = load_backend(backend_path)
    user = backend.get_user(user_id) or AnonymousUser()
  except KeyError:
    user = AnonymousUser()
  return user

class LazyUser(object):
  def __get__(self, request, obj_type=None):
    if not hasattr(request, '_cached_user'):
        from django.contrib.auth import get_user
        request._cached_user = get_user(request)
    return request._cached_user

class AuthenticationMiddleware(object):
  def process_request(self, request):
    assert hasattr(request, 'session'), "The Django authentication ..."
    request.__class__.user = LazyUser()
    return None
  • Пытается ли он предотвратить попадание в базу данных для экземпляра пользователя при каждом запросе?
  • Не устареет ли запись пользователя?
  • Почему они просто не сохраняют пользовательский экземпляр или ключ к нему в сеансе?
  • зачем присваивать request.__class__.user, а не просто request.user?

Я бы добавил процедуры аутентификации, входа в систему и выхода из системы, но не хочу утомлять вас слишком большим количеством дампов кода. Я думаю, что я понимаю это сейчас (последний вопрос может быть ключевым), но только потому, что заставил себя сформулировать вопрос (несколько) разумно: -)

1 Ответ

4 голосов
/ 06 мая 2011
  1. Нет. Он тянет пользователя максимум один раз за запрос, но не охватывает запросы.
  2. Да.
  3. Они делают. Магазин ПК.
  4. Так что он становится атрибутом класса request (в отличие от атрибута экземпляра), что позволяет ему корректно работать как дескриптор .
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...