signals.py 919 B

12345678910111213141516171819202122232425262728293031323334
  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 django.core.exceptions import ObjectDoesNotExist
  6. from axes.models import AccessLog
  7. user_locked_out = Signal(providing_args=['request', 'username', 'ip_address'])
  8. @receiver(user_logged_out)
  9. def log_user_lockout(sender, request, user, signal, *args, **kwargs):
  10. """ When a user logs out, update the access log
  11. """
  12. if not user:
  13. return
  14. try:
  15. username = user.get_username()
  16. except AttributeError:
  17. # Django < 1.5
  18. username = user.username
  19. access_logs = AccessLog.objects.filter(
  20. username=username,
  21. logout_time__isnull=True,
  22. ).order_by('-attempt_time')
  23. if access_logs:
  24. access_log = access_logs[0]
  25. access_log.logout_time = now()
  26. access_log.save()