Ответ 1
Существует объект django.contrib.auth.models.User
, прикрепленный к запросу; вы можете получить доступ к нему в режиме просмотра через request.user
. У вас должно быть установлено промежуточное программное обеспечение auth.
Я внедрил систему регистрации/входа/аутентификации, используя это руководство Django.
Но как я могу получить доступ к пользовательской информации из своих представлений, чтобы я мог отправить информацию о пользователе в файл шаблона?
Я хочу иметь доступ к идентификатору пользователя, чтобы я мог отправить форму с идентификатором пользователя, прикрепленным к форме.
Существует объект django.contrib.auth.models.User
, прикрепленный к запросу; вы можете получить доступ к нему в режиме просмотра через request.user
. У вас должно быть установлено промежуточное программное обеспечение auth.
В случае, если кто-то хочет фактически извлечь идентификатор пользователя из реального объекта 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)
Кредит должен пойти на Скотт Барнхэм
Это:
def view(request):
if request.user.is_authenticated():
user = request.user
# do something with user
Еще более простой способ сделать это - установить django-extensions и запустить команду управления print_user_for_session.
И вот как они это делают:
Если решение 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