AuthenticationMiddleware добавляет атрибут пользователя, представляющий текущий-авторизованный пользователь, чтобы каждый входящего HttpRequest объект. Средство промежуточной проверки подлинности требует установки промежуточного ПО сеанса. Таким образом, вы должны добавить это в settings.py промежуточное программное к MIDDLEWARE_CLASSES кортежем:
MIDDLEWARE_CLASSES = (
#...
'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
#...
)
Кстати, если вы хотите знать, откуда это получить промежуточного пользователя, смотрите на Идент источника промежуточного слоя:
# contrib.auth.middleware.py:
def get_user(request):
if not hasattr(request, '_cached_user'):
request._cached_user = auth.get_user(request)
return request._cached_user
class AuthenticationMiddleware(object):
def process_request(self, request):
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'."
request.user = SimpleLazyObject(lambda: get_user(request))
# django.contrib.auth.__init__.py (auth.get_user)
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
и по умолчанию backend.get_user:
# contrib.auth.backends.py
def get_user(self, user_id):
try:
return User.objects.get(pk=user_id)
except User.DoesNotExist:
return None
запрос = request.user может быть? – ndpu
, пожалуйста, прочитайте о объекте django.contrib.auth.models.User –
Ваш первый пример НЕ является тем, как вы получаете пользователя. посмотрите https://docs.djangoproject.com/en/1.2/topics/auth/#authentication-in-web-requests, что вы сделали пример приложения Django? –