开发者

count number of logins by specific user django?

Is their any way of counting number of django logins? The last_login field of the auth_user gets updated with each login. Can we make use of 开发者_高级运维that field to count number of logins by a specific user?


There's also a 'user_logged_in' signal that'll do the trick with out the need to check for last logins etc.

class UserLogin(models.Model):
    """Represent users' logins, one per record"""
    user = models.ForeignKey(user) 
    timestamp = models.DateTimeField()

from django.contrib.auth.signals import user_logged_in

def update_user_login(sender, user, **kwargs):
    user.userlogin_set.create(timestamp=timezone.now())
    user.save()

user_logged_in.connect(update_user_login)


Yes, in a sense. You'll need either a field in you app's UserProfile model to hold number of logins or a separate model for storing full login history. Then add signal handlers for last_login updates and record them in a model of your choice. Here's my example:

from django.db import models, signals
from django.contrib.auth.models import User

class UserLogin(models.Model):
    """Represent users' logins, one per record"""
    user = models.ForeignKey(user) 
    timestamp = models.DateTimeField()

def user_presave(sender, instance, **kwargs):
    if instance.last_login:
        old = instance.__class__.objects.get(pk=instance.pk)
        if instance.last_login != old.last_login:
            instance.userlogin_set.create(timestamp=instance.last_login)

signals.pre_save.connect(user_presave, sender=User)


This is how I did (using django 1.7), similar to Guy Bowden answer:

from django.contrib.auth.models import User
from django.contrib.auth.signals import user_logged_in

class LoginUpdate(models.Model):
    date_updated = models.DateTimeField(auto_now_add=True, null=True)
    action_type = models.CharField(max_length=5)
    action_user = models.ForeignKey(User, null=True, blank=True)

def update_user_login(sender, **kwargs):
    user = kwargs.pop('user', None)
    LoginUpdate.objects.create(action_type="Login", action_user=user)

user_logged_in.connect(update_user_login, sender=User)

Later you can count number of logins, in your views.


You can use django-timeStamps to store rcent login times. A simple light weight tool.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜