2017-09-27 6 views
-1

zu setzen, was ich in meinem codierten session_data haben ist:Wie neuen Wert für einen Schlüssel in Django session_data

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

Was ich versucht habe, ist (erster Ansatz):

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

aber es ist nicht workspaceKey ist mein bestehender session_data

Ein anderer Ansatz, was ich versuchte Aktualisierung ist:

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

Erneut ist es nicht aktualisiert workspaceKey ist mein existierendes session_data. Ich habe auch unter Kombinationen mit Bezug auf obigen Ansatz versuche

request.session.modified = True 
SESSION_SAVE_EVERY_REQUEST=False 

Mein Code ist wie dies

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 

Was ich in meiner Ausgabe als (neuer Arbeitsbereich Schlüssel soll aktualisiert werden) erwarten

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

Woher wissen Sie, dass es nicht aktualisiert wird? Die erste Methode ist die richtige und einzige Art, dies zu tun; Sitzungen sind wie Wörterbücher zu behandeln. –

+0

Ich drucke aktualisierte Sitzungsdaten und es spiegelt den alten Wert wider. Trotzdem werde ich es noch einmal versuchen. – Roshan

+0

Wo drucken Sie es? Zeige die ganze Ansicht. –

Antwort

0

Im Folgenden Code geben funktioniert perfekt, um session_data von django Sitzungstabelle zu ändern. Re-encoding der aktualisierte Schlüssel von session_data stellt aktualisierte session_data.So der entscheidende Punkt ist nach der Decodierung Datencodierung ist muss.

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

Sie müssen speichern und nachdem Sie diese Sitzung aus Db abrufen und diese verschlüsselte Sitzung dekodieren müssen, benötigen Sie den aktualisierten Sitzungswert.

Versuchen unter Code, der neue Sitzungsdaten

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 
Verwandte Themen