如何在Django Session_data中为键设置新值

时间:2017-09-27 13:25:42

标签: django django-admin django-sessions

我在编码的session_data中拥有的是:

request.session['workspaceKey'] = "123f4b3106c740c1a54970a8b67d111d"

我所尝试的是(第一种方法):

sessionid = Session.objects.get(session_key=session_key)
sessionid.get_decoded()['workspaceKey'] = "8d7f4b3106c740c1a54970a8b67d111d"

但它没有更新workspaceKey是我现有的session_data

我尝试的另一种方法是:

request.session.modified = True 
SESSION_SAVE_EVERY_REQUEST=False

同样不是更新workspaceKey是我现有的session_data。 我也尝试过以下关于上述方法的组合

session_key = request.data['sessionKey'] 
request.session['workspaceKey']= "somenewkey" 
request.session.modified = True 
sessionid = Session.objects.get(session_key=session_key) 
session_data= sessionid.get_decoded()
print session_data

我的代码就像这样

'workspaceKey':'123f4b3106c740c1a54970a8b67d111d', 
'_auth_user_hash': '7e024dd67ccb0e2aaab9ac1a92887109f7f020e4', 
'_auth_user_id': '1', 
'_auth_user_backend': 'django.contrib.auth.backends.ModelBackend'

我在输出中的期望是(新的工作区密钥应该更新)

import $ from 'jquery';
import Simulate from 'jquery-simulate';

2 个答案:

答案 0 :(得分:3)

您需要保存并在从db获取该会话并解码后,加密会话将为您提供更新的会话值。

尝试以下代码,以提供新的会话数据

from django.contrib.sessions.models import Session
session_key = request.data['sessionKey'] 
request.session['workspaceKey']= "somenewkey" 
request.session.save()
session_obj = Session.objects.get(session_key=request.session.session_key).get_decoded()
print session_obj

答案 1 :(得分:3)

下面的代码完美地工作,以便更改django会话表的session_data。 重新编码 session_data的更新密钥提供更新的session_data.So关键点是解码后数据编码必须。

from django.contrib.sessions.models import Session
from django.contrib.sessions.backends.db import SessionStore
workspaceKey ="123f4b3106c740c1a54970a8b67d111d"
session_key = request.data['sessionKey']
sessionid = Session.objects.get(session_key=session_key)
session_data= sessionid.get_decoded()
print session_data['workspaceKey']
session_data['workspaceKey']= workspaceKey
encoded_data = SessionStore().encode(session_data)
sessionid.session_data = encoded_data
sessionid.save()