2013-04-18 4 views
1

Как я могу получить объект пользователя, который login() сохранил в сеансе?Получить объект пользователя из сеанса

user= request.session.get('user') 

возвращает nothingIn этого примера:

user = authenticate(username=username, password=password) 
if user is not None: 
    if user.is_active: 
     login(request, user) 
+0

запрос = request.user может быть? – ndpu

+0

, пожалуйста, прочитайте о объекте django.contrib.auth.models.User –

+0

Ваш первый пример НЕ является тем, как вы получаете пользователя. посмотрите https://docs.djangoproject.com/en/1.2/topics/auth/#authentication-in-web-requests, что вы сделали пример приложения Django? –

ответ

-1

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 
+0

спасибо. request.user работает сейчас :) – hln

2

Убедитесь, что вы «django.contrib.auth» и «django.contrib.contenttypes» в установленных приложениях. после этого выполните syncdb. Теперь у вас будут все необходимые таблицы пользователей.

Дальше вы хотите, чтобы у вас есть request.user по каждому запросу. Я думаю, именно поэтому вы не получаете ничего с request.user. SessionMiddleware и AuthenticationMiddleware Средство должно быть в вашем MIDDLEWARE_CLASSES в настройках.

Для получения более подробной информации читайте документацию here

Смежные вопросы