apps.py 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. from logging import getLogger
  2. from django import apps
  3. from pkg_resources import get_distribution
  4. log = getLogger(__name__)
  5. class AppConfig(apps.AppConfig):
  6. name = "axes"
  7. initialized = False
  8. @classmethod
  9. def initialize(cls):
  10. """
  11. Initialize Axes logging and show version information.
  12. This method is re-entrant and can be called multiple times.
  13. It displays version information exactly once at application startup.
  14. """
  15. if cls.initialized:
  16. return
  17. cls.initialized = True
  18. # Only import settings, checks, and signals one time after Django has been initialized
  19. from axes.conf import settings # noqa
  20. from axes import checks, signals # noqa
  21. # Skip startup log messages if Axes is not set to verbose
  22. if settings.AXES_VERBOSE:
  23. log.info("AXES: BEGIN LOG")
  24. log.info(
  25. "AXES: Using django-axes version %s",
  26. get_distribution("django-axes").version,
  27. )
  28. if settings.AXES_ONLY_USER_FAILURES:
  29. log.info("AXES: blocking by username only.")
  30. elif settings.AXES_LOCK_OUT_BY_COMBINATION_USER_AND_IP:
  31. log.info("AXES: blocking by combination of username and IP.")
  32. elif settings.AXES_LOCK_OUT_BY_USER_OR_IP:
  33. log.info("AXES: blocking by username or IP.")
  34. else:
  35. log.info("AXES: blocking by IP only.")
  36. def ready(self):
  37. self.initialize()