Получить имя пользователя из куки - PullRequest
2 голосов
/ 08 января 2011

Я использую бэкэнд-решение от django.Я просто хочу получить имя пользователя из cookie-файла или session_key, чтобы узнать пользователя.Как я могу это сделать?

from django.contrib.auth.models import User
from django.contrib.sessions.models import Session

def start(request, template_name="registration/my_account.html"):
    user_id = request.session.get('session_key')
    if user_id:
        name = request.user.username
        return render_to_response(template_name, locals())
    else:
        return render_to_response('account/noauth.html')

Только еще подходит.Что я делаю не так?

Правильно ли я тогда, что аутентифицированный означает, что он вошел в систему?

-> Хорошо, это я получил!Во-первых, если у вас есть некоторые пояснения к вопросу, обновите вопрос, не размещайте ответ или (что еще хуже) другой вопрос, как вы это сделали.Во-вторых, если пользователь вышел из системы, по определению у него нет имени пользователя.

Я имею в виду, что преимущество файлов cookie в том, чтобы снова идентифицировать пользователя.Я просто хочу разместить его имя на веб-странице.Даже если он вышел из системы.Или это не возможно?

Ответы [ 3 ]

4 голосов
/ 08 января 2011

Вы можете проверить, аутентифицирован ли пользователь, вызвав метод is_authenticated с подходящим именем. Ваш код будет выглядеть примерно так:

def start(request, template_name="registration/my_account.html"):
    if request.user.is_authenticated():
        name = request.user.username
        return render_to_response(template_name, locals())
    else:
        return render_to_response('account/noauth.html')

Нет необходимости открывать сеанс самостоятельно, Django обрабатывает все это автоматически (при условии, что вы используете django.contrib.sessions и django.contrib.auth).

/ edit: для того, чтобы иметь имя пользователя, ему необходимо пройти аутентификацию. Нет хорошего способа обойти это.

2 голосов
/ 08 января 2011

piquadrat имеет абсолютно правильный ответ, но если по какой-то причине вам нужно получить пользователя из сеанса, вы вызываете get_decoded() для объекта сеанса:

session_data = request.session.get_decoded()
user_id = session_data['_auth_user_id']
0 голосов
/ 08 января 2011

Вам нужно включить AuthenticationMiddleware и SessionMiddleware в настройке MIDDLEWARE_CLASSES в файле settings.py для доступа к request.user в ваших представлениях.

http://docs.djangoproject.com/en/1.2/topics/auth/#authentication-in-web-requests

Затем вы можете получить доступ к имени пользователя, используя request.user.username

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...