如何在Django会话_数据中为密钥设置新值

如何在Django会话_数据中为密钥设置新值,django,django-admin,django-sessions,Django,Django Admin,Django Sessions,我的编码会话_数据中有: 'workspaceKey':'8d7f4b3106c740c1a54970a8b67d156d', '_auth_user_hash': '7e024dd67ccb0e2aaab9ac1a92887109f7f020e4', '_auth_user_id': '1', '_auth_user_backend': 'django.contrib.auth.backends.ModelBackend' 我尝试的是第一种方法: request.session['wo

我的编码会话_数据中有:

'workspaceKey':'8d7f4b3106c740c1a54970a8b67d156d', 
'_auth_user_hash': '7e024dd67ccb0e2aaab9ac1a92887109f7f020e4', 
'_auth_user_id': '1', 
'_auth_user_backend': 'django.contrib.auth.backends.ModelBackend'
我尝试的是第一种方法:

request.session['workspaceKey'] = "123f4b3106c740c1a54970a8b67d111d"
但它并没有更新workspaceKey是我现有的会话_数据

我尝试的另一种方法是:

sessionid = Session.objects.get(session_key=session_key)
sessionid.get_decoded()['workspaceKey'] = "8d7f4b3106c740c1a54970a8b67d111d"
同样,它没有更新workspaceKey是我的现有会话数据。 我还尝试了以下与上述方法相关的组合

request.session.modified = True 
SESSION_SAVE_EVERY_REQUEST=False
我的代码是这样的

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'

您需要保存会话,然后从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

下面的代码可以完美地更改django会话表的会话_数据。 重新编码会话_数据的更新密钥将提供更新的会话_数据。因此,关键点是在解码数据后必须进行编码

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()

你怎么知道它没有更新?第一种方法是正确和唯一的方法;会话将被视为字典。我正在打印更新的会话_数据,它反映了旧值。不过我还是会再试一次。你在哪里打印?显示整个视图。@Daniel session\u key=request.data['sessionKey']request.session['workspaceKey']=somenewkey request.session.modified=True sessionid=session.objects.getsession\u key=session\u key session\u data=sessionid.get\u decoded打印session\u data-**输出**session\u数据{u'workspaceKey':u'8d7f4b3106c740c1a54970a8b67d156d',u'u auth_user_hash':u'7e024dd67ccb0 e20d0b9ac1a92887109f7f020e4',u'u auth_user_id':u'1',u'u'u'u'u auth_user_backend':u'django.cont rib.auth.backends.modelbend'}请将该代码作为问题的更新,并对其进行适当的格式化。但是在视图返回并且SessionMiddleware运行其process\u response方法之前,会话对象不会被修改。正如我所提到的,不需要直接访问会话表。为什么会这样?为什么我不能执行request.Session.get\u decoded'key'?