validators.py 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import re
  2. from django.core.exceptions import ValidationError
  3. from django.utils.translation import ungettext, ugettext_lazy as _
  4. from django.contrib.auth import get_user_model
  5. from misago.conf import settings
  6. USERNAME_REGEX = re.compile(r'^[0-9a-z]+$', re.IGNORECASE)
  7. def validate_username_available(value):
  8. User = get_user_model()
  9. try:
  10. User.objects.get_by_username(value)
  11. except User.DoesNotExist:
  12. pass
  13. else:
  14. raise ValidationError(_("This username is not available."))
  15. def validate_username_content(value):
  16. if not USERNAME_REGEX.match(value):
  17. raise ValidationError(
  18. _("Username can only contain latin alphabet letters and digits."))
  19. def validate_username_length(value):
  20. if len(value) < settings.username_length_min:
  21. message = ungettext(
  22. 'Username must be at least one character long.',
  23. 'Username must be at least %(count)d characters long.',
  24. settings.username_length_min)
  25. message = message % {'count': settings.username_length_min}
  26. raise ValidationError(message)
  27. if len(value) > settings.username_length_max:
  28. message = ungettext(
  29. "Username cannot be longer than one characters.",
  30. "Username cannot be longer than %(count)d characters.",
  31. settings.username_length_max)
  32. message = message % {'count': settings.username_length_max}
  33. raise ValidationError(message)
  34. def validate_username(value):
  35. """Shortcut function that does complete validation of username"""
  36. validate_username_content(value)
  37. validate_username_length(value)
  38. validate_username_available(value)
  39. def validate_email_available(value):
  40. User = get_user_model()
  41. try:
  42. User.objects.get_by_email(value)
  43. except User.DoesNotExist:
  44. pass
  45. else:
  46. raise ValidationError(_("This e-mail address is not available."))