2013-05-28 31 views
0

有什麼方法可以查看用戶是否在一段時間內不活動?例如,Twitter在閒置一段時間後向其用戶發送電子郵件。我想要實現一個類似的功能,如果用戶在30天內一直處於非活動狀態,則會發送一封電子郵件「Hello User,查看您的朋友發佈的內容」如何實現此目的?Django用戶無活動

回答

1

您可以編寫一個管理命令,檢查上次登錄的用戶以及日期是否大於30的情況,發送電子郵件。 (您可以實現這爲每天運行一個cron)

import datetime 
from django.core.management.base import BaseCommand 

def compute_inactivity(): 
    inactive_users = User.objects.filter(last_login__lt=datetime.datetime.now() - datetime.timedelta(months=1)) 
    #send out emails to these users 

class Command(BaseCommand): 

    def handle(self, **options): 
     compute_inactivity() 

如果在限定「活動」任何其他條件,您可以根據您的查詢集進行篩選。

+0

感謝您的快速回復!我正在尋找這樣的東西,我會試試看看它是否有效!我會告訴你! – noahandthewhale

+0

太好了。讓我知道 – karthikr

+1

在這種情況下,當至少一個月過去時(每當cron作業設置時),每天都會通知非活動用戶。不是檢查「小於」條件,最好檢查「等於」條件,即在30天過後,用戶得到通知。 –

1

嗯,django.contrib.auth.models.User有一個可能對您有用的last_login字段。

無論你在哪裏,請檢查last_login日期User,你現在會離開你的網站多久。

希望這會有所幫助!

+0

嘿,感謝您的快速回復,我在django管理頁面上找到了所有這些信息,我就投了你的答案。看看上面的karthikr的回答,這更多的是我正在尋找的答案! :) – noahandthewhale

+0

我很高興你發現你的答案。我只是建議你該做什麼。感謝updvote。 –

0

在閱讀了karthikr的回答和Aidas Bendoraitis的建議之後,我在下面寫了更正解決方案。這是非常相似的Karthikr的回答只是不使用的__lt豐富的比較操作,使用__eq操作:

import datetime 
from django.core.management.base import BaseCommand 

def compute_inactivity(): 
    inactive_users = User.objects.filter(last_login__eq=datetime.datetime.now() - datetime.timedelta(months=1)) 
    #send out emails to these users 

class Command(BaseCommand): 

def handle(self, **options): 
    compute_inactivity() 
0

我的做法是向用戶發送通知準確算起30天后,自上次登錄通過。爲此,您需要創建一個管理命令,並將其作爲每日cron作業運行。

import datetime 
from django.core.management.base import BaseCommand 

def compute_inactivity(): 
    a_month_ago = datetime.datetime.now() - datetime.timedelta(days=30) 
    inactive_users = User.objects.filter(
     last_login__year=a_month_ago.year, 
     last_login__month=a_month_ago.month, 
     last_login__day=a_month_ago.day, 
     ) 
    #send out emails to these users 

class Command(BaseCommand): 
    def handle(self, **options): 
     compute_inactivity()