2013-05-28 33 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()