Commit 58a61be82f0efef2e3014fe4f41fe4176950341f
1 parent
a991d922
Exists in
master
and in
39 other branches
Adding script to erase inactive accounts
Showing
3 changed files
with
42 additions
and
0 deletions
Show diff stats
... | ... | @@ -0,0 +1,42 @@ |
1 | + | |
2 | + | |
3 | +from django.db.models import F | |
4 | +from django.utils import timezone | |
5 | +from django.utils.translation import ugettext as _ | |
6 | +from django.core.management.base import BaseCommand, CommandError | |
7 | + | |
8 | + | |
9 | +from ...models import User | |
10 | + | |
11 | + | |
12 | +class Command(BaseCommand): | |
13 | + """Delete user accounts that have never logged in. | |
14 | + | |
15 | + Delete from database user accounts that have never logged in | |
16 | + and are at least 24h older. | |
17 | + | |
18 | + """ | |
19 | + | |
20 | + help = __doc__ | |
21 | + | |
22 | + def handle(self, *args, **kwargs): | |
23 | + seconds = timezone.timedelta(seconds=1) | |
24 | + now = timezone.now() | |
25 | + one_day_ago = timezone.timedelta(days=1) | |
26 | + | |
27 | + # Query for users that have NEVER logged in | |
28 | + # | |
29 | + # By default django sets the last_login as auto_now and then | |
30 | + # last_login is pretty much the same than date_joined | |
31 | + # (instead of null as I expected). Because of that we query | |
32 | + # for users which last_login is between date_joined - N and | |
33 | + # date_joined + N, where N is a small constant in seconds. | |
34 | + users = User.objects.filter(last_login__gt=(F('date_joined') - seconds), | |
35 | + last_login__lt=(F('date_joined') + seconds), | |
36 | + date_joined__lt=now-one_day_ago) | |
37 | + count = 0 | |
38 | + for user in users: | |
39 | + count += 1 | |
40 | + user.delete() | |
41 | + | |
42 | + print _(u'%(count)s users deleted.') % {'count': count} | ... | ... |