2013-05-28 4 views
0

Есть ли способ узнать, не работает ли пользователь в течение определенного времени? Например, Twitter отправляет электронное письмо своим пользователям через определенное время бездействия. Я хотел бы реализовать аналогичную функцию, если если пользователь неактивен в течение 30 дней, отправляется сообщение «Привет, пользователь, проверьте, что ваши друзья отправляли». Как я могу это реализовать?Неактивность пользователя Django

ответ

1

Вы можете написать команду управления, которая проверяет вход пользователя в последний раз и если дни больше 30, отправьте электронное письмо. (Вы могли бы реализовать это как хроны, который работает каждый день)

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() 

Если у вас есть какие-либо другие критерии, которые определяют «активность», вы можете отфильтровать ваш QuerySet на его основе.

+0

благодарит за быстрый ответ! Я искал что-то вроде этого, я собираюсь попробовать это и посмотреть, работает ли это! Я дам Вам знать! – noahandthewhale

+0

Отлично. Дайте мне знать – karthikr

+1

При этом условии неактивные пользователи будут уведомляться каждый день, когда пройдет не менее месяца (каждый момент задается задание cron). Вместо того, чтобы проверять условие «меньше», лучше проверить условие «равно», т. Е. Когда прошло 30 дней, пользователь получает уведомление. –

1

Ну, django.contrib.auth.models.User имеет поле last_login, которое может быть полезно вам.

Просто, где бы вы ни находились, отметьте last_login датой User, и вы теперь будете, как долго он был вдали от вашего сайта.

Надеюсь, это поможет!

+0

эй, спасибо за быстрый ответ, я нашел всю эту информацию на странице администрирования django, я проголосовал за ваш ответ. Проверьте ответ karthikr выше, это был больше ответ, который я искал! :) – noahandthewhale

+0

Я рад, что вы нашли ответ. Мое было только предложить вам, что делать. Спасибо за обновление. –

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() 
Смежные вопросы