2013-02-04 17 views

回答

21

您需要在用戶配置文件(或自定義用戶模型)中具有last_activity字段。該字段將在每個請求中更新。要做到這一點,你需要有自定義的中間件:

型材/ middleware.py:

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()) 

在你的設置文件添加這個中間件:

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

工作就像一個魅力,謝謝! –

+0

看起來這會導致數據庫數量非常大,可能會影響性能。爲了提高效率,請考慮將最後一項活動寫入緩存,然後定期寫入數據庫。我相信這就是https://bitbucket.org/ferranp/django-last-seen可能做到的。 –

+1

雖然這回答了這個問題,但是當用戶數量增加時,這打破了我的Django安裝。花了幾個小時才弄清楚,所以我希望這篇文章可以節省一些時間! – gabn88