2013-05-28 6 views
0

사용자가 특정 시간 동안 비활성 상태인지 확인하는 방법이 있습니까? 예를 들어 트위터는 일정 시간 동안 사용하지 않으면 사용자에게 이메일을 전송합니다. 사용자가 30 일 동안 비활성 상태 인 경우 "Hello User, 친구가 게시 한 내용을 확인하십시오"와 유사한 기능을 구현하고 싶습니다. 어떻게 구현할 수 있습니까?장고 사용자 비활성

답변

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

(당신은 매일 실행되는 크론으로 이것을 구현할 수 있습니다).

+0

빠른 답장을 보내 주셔서 감사합니다. 이런 식으로 뭔가를 찾고 있었는데, 이것을 시험해보고 효과가 있는지 살펴 보려고합니다! 내가 알려 주마! – noahandthewhale

+0

좋습니다. 알려주십시오 – karthikr

+1

이 조건으로, 비활성 사용자는 매일 적어도 한 달이 경과하면 (cron 작업이 설정 될 때마다) 통보됩니다. '미만'조건을 확인하는 대신 '같음'조건을 확인하는 것이 좋습니다. 즉, 30 일이 경과하면 사용자가 알림을받습니다. 이 경우 –

1

글쎄, django.contrib.auth.models.User은 유용 할 수도있는 last_login 필드를 가지고 있습니다.

언제든지 의 날짜를 확인하면 그가 사이트에서 얼마나 떨어져 있는지 확인할 수 있습니다.

희망이 도움이됩니다.

+0

안녕하세요, 빠른 답장을 보내 주셔서 감사합니다. 장고 관리 페이지에 대한 정보를 모두 찾았습니다. 답변에 투표했습니다. 위의 karthikr의 답변을 확인하십시오, 그것은 내가 찾던 답 중 더 많았습니다! :) – noahandthewhale

+0

당신이 답을 찾은 것을 기쁘게 생각합니다. 내 것은 단지 당신에게 무엇을해야하는지 제안하는 것이 었습니다. updvote 주셔서 감사합니다. –

0

karthikr의 답변과 Aidas Bendoraitis의 제안을 읽은 후, 아래에 수정 해결책을 작성했습니다. 그것은 대신 __lt 풍부한 비교 연산자를 사용하여 제외 Karthikr의 대답과 매우 유사의 __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()