2017-07-04 29 views
1

我的網站要求用戶確認他們在註冊時使用的電子郵件地址。因此我發送了通常的確認電子郵件。如果這樣的電子郵件反彈,我的電子郵件提供商(sendgrid)會通知我。 我想通知用戶,當他下次到我的網站時,他的電子郵件問題。 來自我的電子郵件提供商的通知是對某個URL的異步回調,我需要一種方法來查找用戶的會話並存儲信息。通知用戶有關退回的確認電子郵件

發送電子郵件時,我可以爲請求添加一些標識符,然後sendgrid將包含在退回消息中。但是出於某些原因,如果可能的話,我寧願不這樣做。我希望存儲用戶在匿名會話中使用的電子郵件地址,並使用此信息稍後查找他的會話。

這有些可能嗎?我可以將一些信息添加到匿名會話中,並將其保存在數據庫中,以便稍後查看它?我的會話配置是默認的Django配置?

+0

您是否必須這樣做,或者您願意接受其他建議? –

+0

我接受其他建議。 – tobltobs

+0

我假設每個用戶都得到一封唯一的電子郵件發送方式,所以它歸結爲提取哪些用戶的電子郵件被反彈的信息。你能分享如何發送電子郵件的詳細信息嗎? –

回答

0

你可能想使用Django sessions system。它在默認情況下在使用manage.py startproject創建的Django項目中啓用。

基本上,SessionMiddlewaresession屬性添加到執行到您的Django項目的所有請求。您可以在視圖使用此屬性作爲一個標準的Python字典:

def my_view(request): 

    # At some point, you retrieved the visitor email... 
    user_email = '[email protected]' 
    request.session['user_email'] = user_email 

存儲在該字典信息默認情況下,持續性。

從技術上講,存儲在這個字典中的數據存儲在您的默認DB中,在表django_session。一個獨特的session_key與這些數據相關聯,並且該密鑰存儲在訪客計算機中的cookie中。這意味着數據有一個到期日期。當用戶回到您的網站時,如果Cookie仍然存在(並且沒有過期),您可以在前幾天存儲它時檢索request.session中的信息。

Django sessions persistency behavior can be controlled 2設置:

假默認。如果設置爲true,則會在用戶關閉瀏覽器時破壞會話。您可能想要將此值設置爲False。

這是默認會話持續時間(秒)。默認值爲1209600,對應於2周。

注意:您可以通過直接調用request.session.set_expiry()來修改會話持續時間。這允許在每個會話的基礎上覆蓋默認設置。

0

Tobitobs,作爲另一種方式:您可以將匿名電子郵件附加到他的localStorage存儲桶,稍後您可以將其還原。但是,我的用戶在瀏覽器中清除了Cookie和其他數據 - 這些電子郵件雲將會丟失。

還有一種方法 - 用設備快照保存電子郵件 - browser-device-os-IP(或其他),並將此信息存儲在數據庫中。

1

通常我不太確定它的一個好主意是依靠能夠識別返回的匿名會話。

另一種解決我經常見到的問題的方法是允許用戶完成註冊,並能夠使用他們的用戶名和密碼登錄,但將用戶標記爲未驗證,可能是使用字段在user profile model。未經驗證的用戶可能會被拒絕訪問您網站的大部分內容。登錄後,如果他們還沒有收到驗證郵件,他們可以要求再次發送驗證郵件,並且如果他們犯了錯誤,可以選擇更新郵件。

它看起來像django-registration應用程序可以幫助很多這樣的。

文檔:https://django-registration.readthedocs.io/en/2.2/install.html

+0

我正在使用django註冊,用戶可以通過輸入他們的電子郵件地址來申請新的確認電子郵件。但理想情況下,我可以向他們提供一份說明,說明他們的最後一封電子郵件在他們回到我的網站時確實會反彈。 – tobltobs