In Django, we can get the time user last logged in by using Auth.User.last_login. That is only updated when the user logs in using his username/password. Supp
The same as John Lehmann's middleware, but rewritten as a function with Andrew Swihart's suggestions and tested on Django 2.2:
def last_user_activity_middleware(get_response):
def middleware(request):
response = get_response(request)
key = "last-activity"
if request.user.is_authenticated:
last_activity = request.session.get(key)
# If key is old enough, update database.
too_old_time = timezone.now() - td(seconds=60 * 60)
if not last_activity or parse(last_activity) < too_old_time:
MyUser.objects.filter(email=request.user).update(
last_visit=timezone.now(),
login_count=F('login_count') + 1)
request.session[key] = timezone.now().isoformat()
return response
return middleware
Learn more about writing own middleware in official documentation: https://docs.djangoproject.com/en/2.2/topics/http/middleware/#writing-your-own-middleware