Django: get last user visit date

前端 未结 7 2221
隐瞒了意图╮
隐瞒了意图╮ 2020-12-13 04:28

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

7条回答
  •  暖寄归人
    2020-12-13 05:06

    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

提交回复
热议问题