2

這是一個非常小的問題,但我必須錯過一些東西,因爲我無法想出一個我很滿意的解決方案。如何在使用django-registration和django-socialauth時顯示註冊後歡迎信息?

我使用兩個庫來處理註冊,基於電子郵件註冊的django註冊和基於社交的註冊的django-socialauth,並希望在用戶首次註冊時顯示歡迎消息。

我目前的做法是有一個上下文處理器,用於檢查用戶是否在過去2分鐘內註冊過,如果是,則更新請求對象。這似乎是低效的,因爲我每次只檢查一次就檢查一次。

我嘗試過使用信號來實現它,但是我碰到的問題是我需要某種方式來掛接請求,但只有django註冊才能傳遞請求。

我正在考慮的一個選項是使用信號更新數據庫中的一條記錄,但對於這種簡單的事情來說這看起來有點過分。我錯過了明顯的東西嗎?

context_processors.py:

def just_registered(request): 
    just_registered = False 
    if request.user.is_authenticated() and request.user.email: 
     if request.user.date_joined < datetime.today() + timedelta(minutes=2): 
      if 'just_registered' not in request.session: 
       just_registered = True 
       request.session['just_registered'] = just_registered 
    return { 'just_registered' : just_registered } 

回答

3

你可以使用Django消息,並在您的模板

{% if messages %} 
    {% for message in messages %} 
    {{message}} 
    {% endfor %} 
{% endif %} 

實現它。

def just_registered(request): 
    if request.user.is_authenticated(): 
     if request.user.date_joined < datetime.today() + timedelta(minutes=2): 
      messages.info(request, "Welcome") 
    return '' 

用戶進行身份驗證已經明白,你不必把用戶的電子郵件,因爲當你註冊,電子郵件需要

+0

不,我明白這一部分。問題是,我不想使用just_registered函數,因爲檢查是爲每個頁面加載完成的,因爲我應該只做一次。 啊感謝電子郵件的注意事項 - 我還使用類似的代碼來處理其他需要電子郵件的地方,如果用戶使用Twitter註冊,那麼電子郵件未設置。 – 2013-02-27 00:35:40

+0

爲什麼不創建裝飾者? – princess 2013-02-27 00:38:01

+0

這將如何工作?用與上下文處理器中大致相同的邏輯包裝每個視圖? – 2013-02-27 15:47:54

0

只是要清楚,你要顯示一個值得歡迎的消息時,用戶第一次成功登錄(它說在您的問題中第一次註冊)?他們是否遵循電子郵件中的激活鏈接?您可以將該電子郵件鏈接轉到目標網頁的新用戶版本。

否則,如果您想爲普通用戶和第一次登錄的用戶使用相同的頁面,我不明白如何避免檢查用戶是否第一次登錄。要做到這一點,似乎在用戶上使用布爾型attrib(或者向他們發送)跟蹤他們之前是否已經登錄,這將是前進的方式,而不是查看他們多久之前激活帳戶(如果他們在2天前激活,但沒有登錄?)

+0

我正在使用不需要激活的基本認證流程。作爲流程的一部分,它還將用戶重定向到自動註冊之前所在的頁面,因此我無法爲剛剛註冊的用戶提供單獨的頁面。 我想過DB標誌,但它看起來像矯枉過正,所以我試圖避免它,除非必要。 – 2013-03-10 23:44:52

+0

我認爲使用django的消息框架可能會起作用,正如公主建議的那樣。我不記得django-registration的觀點,但你可以進入用戶創建賬戶時註冊的賬戶(註冊也許?),並添加一條向用戶添加歡迎消息的行。然後你不需要just_registered函數。 – 2013-03-11 02:33:45

+0

問題是我使用pip安裝了這些庫,儘管我知道我可以繞過它們,但我希望儘可能避免它。我最終可能會做一些簡單的事情,併爲社交認證應用程序生成一個信號,使其具有與註冊應用程序相同的格式。 – 2013-03-11 14:56:02

0

從您對公主的評論回答你最好的選擇將是當用戶第一次登錄時保存某種數據。

我建議寫一個簡單的中間件檢測第一次登錄並保存在一個持久的形式

看一看這樣的:

http://blog.elcodo.pl/post/926902087/django-detect-users-first-login

您還可以檢出中間件在Django跟蹤

https://github.com/codekoala/django-tracking/blob/master/tracking/middleware.py

這是稍微ineffici恩,但我沒有看到任何其他方式給予HTTP的無國籍狀態