10
django的用戶模型有一個last_login
字段,如果所有用戶每次離開網站時都註銷,那麼這個字段會很棒,但如果他們不這樣做呢?Django:如果用戶沒有註銷,我如何檢查用戶的上次活動時間?
如何跟蹤何時從未註銷過的用戶以及他在網站上的活動?
django的用戶模型有一個last_login
字段,如果所有用戶每次離開網站時都註銷,那麼這個字段會很棒,但如果他們不這樣做呢?Django:如果用戶沒有註銷,我如何檢查用戶的上次活動時間?
如何跟蹤何時從未註銷過的用戶以及他在網站上的活動?
您需要在用戶配置文件(或自定義用戶模型)中具有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',
)
工作就像一個魅力,謝謝! –
看起來這會導致數據庫數量非常大,可能會影響性能。爲了提高效率,請考慮將最後一項活動寫入緩存,然後定期寫入數據庫。我相信這就是https://bitbucket.org/ferranp/django-last-seen可能做到的。 –
雖然這回答了這個問題,但是當用戶數量增加時,這打破了我的Django安裝。花了幾個小時才弄清楚,所以我希望這篇文章可以節省一些時間! – gabn88