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