2013-02-04 26 views

cevap

21

Kullanıcı profilinde (veya özel kullanıcı modelinde) last_activity alanına sahip olmanız gerekir. Bu alan her istekte güncellenecektir.

profilleri/middleware.py: özel ortakatmanını olması gerekir Bunu başarmak için

from django.utils import timezone 

from myproject.profiles.models import Profile 


class UpdateLastActivityMiddleware(object): 
    def process_view(self, request, view_func, view_args, view_kwargs): 
     assert hasattr(request, 'user'), 'The UpdateLastActivityMiddleware requires authentication middleware to be installed.' 
     if request.user.is_authenticated(): 
      Profile.objects.filter(user__id=request.user.id) \ 
          .update(last_activity=timezone.now()) 

Ayarınızın dosyasında bu ortakatmanını ekleyin:

MIDDLEWARE_CLASSES = (
    # other middlewares 
    'myproject.profiles.middleware.UpdateLastActivityMiddleware', 
) 
+0

bir cazibe gibi çalıştı, teşekkürler! –

+0

Bu durum, veritabanını potansiyel olarak performansı etkileyecek çok sayıda yazma ile sonuçlanacak gibi görünüyor. Daha verimli bir şey için, son etkinliği bir önbelleğe yazmayı ve ardından periyodik olarak veritabanına yazmayı düşünün. Sanırım https://bitbucket.org/ferranp/django-last-seen muhtemelen böyle yapar. –

+1

Bu soruya cevap verse de, kullanıcı sayısı arttığında bu Django yüklememi kırdı. Anlamak biraz zaman aldı, bu yüzden bu yazının bir kaç saat tasarruf etmesini umuyorum! – gabn88

İlgili konular