Django用户不活动

时间:2013-05-28 16:29:57

标签: django django-users

有没有办法查看用户是否在一段时间内处于非活动状态?例如,Twitter在一段时间不活动后向其用户发送电子邮件。我想实现一个类似的功能,如果用户已经处于非活动状态30天,则会发送一封电子邮件“Hello User,查看您的朋友发布的内容”我该如何实现?

4 个答案:

答案 0 :(得分: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()

如果您有任何其他定义“活动”的条件,则可以根据该条件过滤您的查询集。

答案 1 :(得分:1)

好吧,django.contrib.auth.models.Userlast_login字段,可能对您有用。

随时随地查看last_login的{​​{1}}日期,现在他已离开您的网站多长时间。

希望这有帮助!

答案 2 :(得分: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()

答案 3 :(得分: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()