2015-12-22 134 views
0

我有一個現有的Django應用程序會話中間件啓用。Django創建會話

當我查看代碼時,我沒有看到任何會話被明確保存的地方(如下圖)創建一個新的會話。

request.session['foo'] = 'bar' 

儘管沒有明確保存,我仍然可以看到創建用戶後創建的會話對象。

是否有可能在用戶創建後創建會話。該應用程序正在使用django allauth進行身份驗證。

當我解碼我的會話對象,這是它的外觀..

{u'_auth_user_backend': u'django.contrib.auth.backends.ModelBackend', 
u'_auth_user_hash': u'df0df84cd5f03676a8756c06fbe6816b9082773d', 
u'_auth_user_id': 21, 
u'otp_device_id': u'two_factor.models.PhoneDevice/30', 
u'wizard_login_view': 
    {u'extra_data': {}, 
     u'step': None, 
     u'step_data': {}, 
     u'step_files': {}, 
     u'validated_step_data': {}}} 
+0

你是什麼意思的「拯救」嗎? – zxq9

+0

它的意思是它的創建和未保存 – user1050619

回答

0

後創建的信號,給這個:

from django.db.models.signals import post_save 
from django.contrib.auth.models import User 
from django.db import models 
from django.contrib.sessions.backends.db import SessionStore 

def write_session(sender, **kw): 
    s = SessionStore() 
    s['foo']="bar" 
    s.save() 
    s.session_key # gives '2b1189a188b44ad18c35e113ac6ceead' 
    s = SessionStore(session_key='2b1189a188b44ad18c35e113ac6ceead') 
    s['foo'] # gives "bar" 

post_save.connect(write_session, sender=User, dispatch_uid="users-writesession-signal") 
+0

你在write_session中的請求你在哪裏? – LinnTroll

+0

它不需要請求。它不是一個視圖。基本上write_session會在創建用戶時收到信號。 –

+0

是的,但是您在write_session中寫入'request.session ['foo'] ='bar'',其中不包含請求。 – LinnTroll