Как войти в систему с UID пользователя из сессии в Django? - PullRequest
20 голосов
/ 03 ноября 2011

Я внедрил систему регистрации / входа в систему / аутентификации, используя это руководство по Django .

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

Я хочу иметь возможность доступа к идентификатору пользователя, чтобы я мог отправить форму с идентификатором пользователя, прикрепленным к форме.

Ответы [ 5 ]

52 голосов
/ 15 ноября 2013

В случае, если кто-то хочет фактически извлечь идентификатор пользователя из фактического объекта Session (по какой-либо причине - я сделал!), Вот как:

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

session_key = '8cae76c505f15432b48c8292a7dd0e54'

session = Session.objects.get(session_key=session_key)
session_data = session.get_decoded()
print session_data
uid = session_data.get('_auth_user_id')
user = User.objects.get(id=uid)

Кредит должен идти на Скотт Барнхэм

12 голосов
/ 03 ноября 2011

К запросу прикреплен объект django.contrib.auth.models.User;Вы можете получить к нему доступ через request.user.У вас должно быть установлено auth middleware .

7 голосов
/ 03 ноября 2011

Это:

def view(request):
    if request.user.is_authenticated():
         user = request.user
         # do something with user
2 голосов
/ 03 февраля 2014

Еще более простой способ сделать это - установить django-extensions и запустить команду управления print_user_for_session.

И вот как они это делают:

https://github.com/django-extensions/django-extensions/blob/master/django_extensions/management/commands/print_user_for_session.py

0 голосов
/ 02 октября 2017

Если решение hwjp не работает для вас («Данные повреждены»), вот другое решение:

import base64
import hashlib
import hmac
import json

def session_utoken(msg, secret_key, class_name='SessionStore'):
    key_salt = "django.contrib.sessions" + class_name
    sha1 = hashlib.sha1((key_salt + secret_key).encode('utf-8')).digest()
    utoken = hmac.new(sha1, msg=msg, digestmod=hashlib.sha1).hexdigest()
    return utoken


def decode(session_data, secret_key, class_name='SessionStore'):
    encoded_data = base64.b64decode(session_data)
    utoken, pickled = encoded_data.split(b':', 1)
    expected_utoken = session_utoken(pickled, secret_key, class_name)
    if utoken.decode() != expected_utoken:
        raise BaseException('Session data corrupted "%s" != "%s"',
                            utoken.decode(),
                            expected_utoken)
    return json.loads(pickled.decode('utf-8'))

s = Session.objects.get(session_key=session_key)
decode(s.session_data, 'YOUR_SECRET_KEY'))

кредит на: http://joelinoff.com/blog/?p=920

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