подсчитать количество логинов конкретного пользователя django? - PullRequest
7 голосов
/ 27 марта 2010

Есть ли какой-нибудь способ подсчета количества входов в django?Поле last_login auth_user обновляется при каждом входе в систему.Можем ли мы использовать это поле для подсчета количества входов определенного пользователя?

Ответы [ 4 ]

10 голосов
/ 25 апреля 2012

Существует также сигнал '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)
5 голосов
/ 27 марта 2010

Да, в некотором смысле. Вам понадобится либо поле в модели 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)
3 голосов
/ 26 февраля 2016

Вот как я это сделал (используя django 1.7), аналогично ответу Гая Боудена:

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)

Позже вы можете посчитать количество логинов в ваших представлениях.

0 голосов
/ 01 декабря 2016

Вы можете использовать django-timeStamps для хранения времени входа в систему. Простой легкий инструмент.

...