2010-03-26 22 views

Trả lời

4

Vâng, theo nghĩa nào đó. Bạn sẽ cần một trường trong mô hình UserProfile của ứng dụng để giữ số lượng đăng nhập hoặc một mô hình riêng biệt để lưu trữ toàn bộ lịch sử đăng nhập. Sau đó, thêm trình xử lý tín hiệu cho các cập nhật last_login và ghi lại chúng trong một mô hình mà bạn chọn. Dưới đây là ví dụ của tôi:

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) 
+0

cảm ơn hoạt động của nó một cách hoàn hảo. – Sujit

+0

Đó là vấn đề về phong cách, nhưng bạn sẽ đặt nó ở đâu trong django (tệp gì?). Bạn có tạo ứng dụng mới không? Cảm ơn. – Roger

+0

'UserProfile' chuyển đến' models.py', trình xử lý tín hiệu đi tới 'listeners.py', cả trong ứng dụng chính của bạn. –

9

Ngoài ra còn có một 'user_logged_in' báo hiệu rằng sẽ làm các trick với ra sự cần thiết để kiểm tra thông tin đăng nhập cuối cùng, vv

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) 
+0

Tôi đã thêm bit này vào mô hình UserProfile của mình, nhưng nó dường như không được kích hoạt khi đăng nhập người dùng (bảng account_userlogin được tạo ra) bất kỳ ý tưởng nào? –

2

này là làm thế nào tôi đã làm (sử dụng django 1.7), tương tự như Guy Bowden trả lời:

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) 

Sau đó bạn có thể đếm số lần đăng nhập, theo quan điểm của bạn.

+0

Cảm ơn, tôi đã thực hiện nhưng tôi bị kẹt ở cách đếm số lượng thông tin đăng nhập và hiển thị chúng trong quản trị viên. Tôi có nên làm việc trong admin.py, views.py, models.py? (django beginnner) ở đây) – juminet

+0

@juminet, phương pháp tôi đã cung cấp, CHỈ tiết kiệm 'date_updated', 'action_type' và 'action_user', trong cơ sở dữ liệu của chúng tôi, sau đó bạn có thể đếm 'action_type' cho một người dùng cụ thể, sử dụng bộ truy vấn django (https: // docs .djangoproject .com/vi/1.11/ref/models/querysets/# count). Vì vậy, queryset của bạn sẽ giống như thế này: LoginUpdate.objects.filter (action_type = "Đăng nhập", action_user = SPECIFIC_USER) .count() –

0

Bạn có thể sử dụng django-timeStamps để lưu trữ thời gian đăng nhập cao. Một công cụ trọng lượng nhẹ đơn giản.

Các vấn đề liên quan