Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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?

like image 369
Sujit Avatar asked Mar 26 '10 21:03

Sujit


2 Answers

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)
like image 172
Guy Bowden Avatar answered Sep 28 '22 20:09

Guy Bowden


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)
like image 42
Alexander Lebedev Avatar answered Sep 28 '22 18:09

Alexander Lebedev