2012-10-22 50 views
2

當創建新用戶時,我想在他們的會話中保留一些信息如何在用戶註冊後保留會話信息(Django)?

例如,用戶在他們註冊(或登錄)後想要使用的會話中存儲的內容。

我會使用任一用戶模型post_save信號(或一個auth登錄信號),但現在看來,這些信號不把該請求,或會話到所發送的信號。我似乎也無法輕易地從用戶那裏獲得會話。

我使用Django 1.4

編輯:讓我舉一個例子。

的問題歸結到這一點 - 我可能希望保留用戶的活動信息,他們登錄過,但我在哪裏存儲這些信息,他們登錄過嗎?一個好的地方應該是一個會話(或者我可以將數據庫中保存的數據鏈接到會話中,使用像臨時用戶一樣的會話)。在任何情況下,直到他們登錄時,我都可以簡單地使用他們的會話(如用戶憑證),並存儲信息,只要Cookie保持不變(我還能如何可靠地跟蹤匿名用戶?)。

但是,一旦他們註冊(或註冊),我希望這些信息從會話移動,進入帳戶正確。一個很好的理由是,定期刪除匿名用戶的數據是有意義的,而註冊用戶的數據將會持續存在。

要做到這一點,我只是想訪問會話(可能是通過請求)從處理器到新用戶的信號,所以我可以從數據會話一次性轉讓。但新用戶信號不包含會話(或請求)。

回答

3

,會話數據應自動login後保留。

此外,user_logged_in信號與請求實際上一起發送。

編輯:

所以使用user_logged_in信號。它攜帶請求。選擇一些特定的密鑰來存儲未經身份驗證的用戶數據(例如"_anonymous_data")。如果在處理信號時將該鍵設置爲request.session,則只需重寫request.user.get_profile()對象上的數據,請致電savedel request.session["_anonymous_data"]

的代碼中檢索它可能看起來像:

if request.user.is_authenticated(): 
    user_data = request.user.get_profile() 
else: 
    user_data = requerst.session["_anonymous_data"] 

這只是順理成章的劃傷。您不想硬編碼會話密鑰或在視圖中編寫這樣的邏輯。如果您需要它的應用程序範圍,則將其嵌入一些抽象類,該抽象類在__init__中接受請求。

+0

會話數據將被保留,但我想利用它。請求是否與登錄信號一起發送?我承認,我只嘗試過新用戶信號。 – Chris2048

+0

看到我上面的編輯。 –

+0

嗯,我的應用程序實際上並沒有在註冊時登錄用戶(這是正常的),但我想我可以調用user_login信號...... – Chris2048