首先,在我想提出问题之前,我想说如果有更合适的方法来实现这一点,请告诉我,因为我可能会使用它。
好的,所以我在我的应用程序中,我需要添加一个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对象。但是当我尝试从中检索任何值时,它返回空,偶数会更改其中的基础键。对此有任何建议表示赞赏。
答案 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']
所以,让它做它的事情,不要忘记保存会话。