如何从Django中的会话登录用户的uid?

时间:2011-11-03 18:27:56

标签: django

我已使用this Django guide实施了注册/登录/身份验证系统。

但是,如何从我的视图中访问用户的信息,以便将用户的信息发送到模板文件?

我希望能够访问用户的ID,以便我可以提交一份表格,其中附有表格的用户ID。

5 个答案:

答案 0 :(得分:51)

如果有人想要从实际的Session对象中提取用户ID(无论出于何种原因 - 我做过!),请按以下步骤操作:

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)

应该转到Scott Barnham

答案 1 :(得分:12)

请求附加了django.contrib.auth.models.User个对象;您可以通过request.user在视图中访问它。但是,您必须安装auth middleware

答案 2 :(得分:7)

此:

def view(request):
    if request.user.is_authenticated():
         user = request.user
         # do something with user

答案 3 :(得分:2)

更简单的方法是安装django-extensions并运行管理命令print_user_for_session。

这就是他们这样做的方式:

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

答案 4 :(得分:0)

如果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

相关问题