django会议之外的意见

时间:2012-12-06 22:41:24

标签: django session

首先,在我想提出问题之前,我想说如果有更合适的方法来实现这一点,请告诉我,因为我可能会使用它。

好的,所以我在我的应用程序中,我需要添加一个REST API以允许用户登录,更改一些内容并注销而无需使用浏览器。我想我会把我写的api_login视图返回给他们的session_key,然后再为每个请求传回会话密钥。例如,

def login(request):
    ... all the django auth code I have
    # login adds the information to the request right?
    login (request, user)
    return simplejson.dumps({'key': request.session.session_key})

我遇到的问题是稍后尝试使用session_key,如下所示,但这很奇怪地失败

key = request.GET['key']
my_session = SessionStore(session_key=key)
my_session.session_key == key
>>> True
my_session.values()
>>> []
my_session.session_key == key
>>> False

正如您所看到的,我使用正确的密钥从数据库中检索SessionStore对象。但是当我尝试从中检索任何值时,它返回空,偶数会更改其中的基础键。对此有任何建议表示赞赏。

1 个答案:

答案 0 :(得分:3)

Django似乎需要知道会话密钥,或者必须自己生成会话密钥。我的猜测要么是你要随机提供一把钥匙,要么就是一无所知(因为它没有保存)。您的示例在我的shell中以完全相同的方式工作。现在这是我的例子:

>>> from django.contrib.sessions.backends.db import SessionStore
>>> key = 'asdf1234'
>>> my_session = SessionStore(session_key=key)
>>> my_session.session_key == key
True
>>> my_session['foo'] = 'bar'
>>> my_session.values()
['bar']
>>> my_session.session_key == key
False
>>> my_session.session_key
'358d6515b129631d89249687790adc49'
>>> my_session.save()

然后回来:

>>> from django.contrib.sessions.backends.db import SessionStore
>>> my_session = SessionStore(session_key='358d6515b129631d89249687790adc49')
>>> my_session.values()
['bar']

所以,让它做它的事情,不要忘记保存会话。