计算特定用户django的登录次数?

时间:2010-03-26 21:46:46

标签: django django-models django-admin

他们以任何方式计算django登录次数吗? 每次登录都会更新auth_user的last_login字段。 我们可以使用该字段来计算特定用户的登录次数吗?

4 个答案:

答案 0 :(得分:10)

还有一个'user_logged_in'信号可以解决上次登录等问题。

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)

答案 1 :(得分:5)

是的,从某种意义上说。您需要app app UserProfile模型中的字段才能保存登录次数,或者需要单独的模型来存储完整登录历史记录。然后为last_login更新添加信号处理程序,并将其记录在您选择的模型中。这是我的例子:

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)

答案 2 :(得分:3)

这就是我所做的(使用django 1.7),类似于Guy Bowden回答:

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)

稍后您可以在视图中计算登录次数。

答案 3 :(得分:0)

您可以使用django-timeStamps存储rcent登录时间。一个简单的轻量级工具。

相关问题