续订session_key django

时间:2014-09-20 21:30:48

标签: python django httprequest django-sessions

我正在尝试编写一个函数来获取所记录的人的username,然后将de session_key更改为新的。{/ p>

到目前为止我写的是:

def get_username(request):
    try:
        for coisa in request:
            session_key = coisa  # This seems to be wrong, but it works
        session = Session.objects.get(session_key=session_key)
        user_id = session.get_decoded().get('_auth_user_id')
        user = User.objects.get(id=user_id)   # Works very well until here, trust me
        session.cycle_key()     #this is where I'm getting the error
        return HttpResponse(user.username)
    except Exception, e:
        print 'Erro: ' + str(e)
        return HttpResponseServerError(str(e))

我传递的请求变量不是通常的django请求,它是由javascript脚本构建的请求,并且在其数据上只有session_key。

我得到的错误是:'Session' object has no attribute 'cycle_key'

我在这个函数上使用的session_key来自一个在页面加载时运行的函数,因此request是来自django的“普通”请求变量:

session_key = request.session.session_key

2 个答案:

答案 0 :(得分:0)

我不明白为什么你要做这一切。该用户已在request.user,因此无需从会话中获取该内容,同样会话本身位于request.session中 - 因此您只需request.session.cycle_key()即可。{{1}}。

答案 1 :(得分:0)

cycle_key()属于sessions.backends.db.SessionStore(继承自SessionBase),以及您尝试使用的内容 这里是models.Session,这是一个会话模型。通常,request.session IIRC是SessionStore的一个实例。

所以你需要在这里创建一个新的SessionStore。它使用会话密钥初始化:

session = SessionStore(session_key)