【问题标题】:django session outside of views视图之外的 django 会话
【发布时间】:2012-11-25 02:11:42
【问题描述】:

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

好的,所以在我的应用程序中,我需要添加一个 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 对象。但是当我尝试从中检索任何值时,它返回空,甚至更改其中的基础键。对此的任何建议表示赞赏。

【问题讨论】:

标签: django session


【解决方案1】:

看来 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']

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-03
    • 1970-01-01
    • 1970-01-01
    • 2019-07-19
    • 2023-03-06
    • 2020-10-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多