signals.py 758 B

123456789101112131415161718192021222324252627
  1. from django.dispatch import receiver
  2. from django.dispatch import Signal
  3. from django.utils.timezone import now
  4. from django.contrib.auth.signals import user_logged_out
  5. from axes.models import AccessLog
  6. user_locked_out = Signal(providing_args=['request', 'username', 'ip_address'])
  7. @receiver(user_logged_out)
  8. def log_user_lockout(sender, request, user, signal, *args, **kwargs):
  9. """ When a user logs out, update the access log
  10. """
  11. if not user:
  12. return
  13. access_logs = AccessLog.objects.filter(
  14. username=user.get_username(),
  15. logout_time__isnull=True,
  16. ).order_by('-attempt_time')
  17. if access_logs.exists():
  18. access_log = access_logs.first()
  19. access_log.logout_time = now()
  20. access_log.save()