forms.py 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. from django.core.exceptions import ValidationError
  2. from django.utils.translation import ugettext_lazy as _
  3. import floppyforms as forms
  4. from misago.conf import settings
  5. from misago.forms import Form, QACaptchaField, ReCaptchaField, ForumTOS
  6. from misago.models import User
  7. from misago.utils.timezones import tzlist
  8. from misago.validators import validate_username, validate_password, validate_email
  9. class UserRegisterForm(Form):
  10. username = forms.CharField(label=_('Username'),
  11. help_text=_("Your displayed username. Between %(min)s and %(max)s characters, only letters and digits are allowed.") % {'min': settings.username_length_min, 'max': settings.username_length_max},
  12. max_length=15)
  13. email = forms.EmailField(label=_('E-mail address'),
  14. help_text=_("Working e-mail inbox is required to maintain control over your forum account."),
  15. max_length=255)
  16. email_rep = forms.EmailField(max_length=255)
  17. password = forms.CharField(label=_('Password'),
  18. help_text=_("Password you will be using to sign in to your account. Make sure it's strong."),
  19. max_length=255,widget=forms.PasswordInput)
  20. password_rep = forms.CharField(max_length=255,widget=forms.PasswordInput)
  21. captcha_qa = QACaptchaField()
  22. recaptcha = ReCaptchaField()
  23. accept_tos = forms.BooleanField(label=_("Forum Terms of Service"),
  24. required=True, widget=ForumTOS,
  25. error_messages={'required': _("Acceptation of board ToS is mandatory for membership.")})
  26. validate_repeats = (('email', 'email_rep'), ('password', 'password_rep'))
  27. repeats_errors = [{
  28. 'different': _("Entered addresses do not match."),
  29. },
  30. {
  31. 'different': _("Entered passwords do not match."),
  32. }]
  33. def finalize_form(self):
  34. if not settings.tos_url and not settings.tos_content:
  35. del self.fields['accept_tos']
  36. def clean_username(self):
  37. validate_username(self.cleaned_data['username'])
  38. new_user = User.objects.get_blank_user()
  39. new_user.set_username(self.cleaned_data['username'])
  40. try:
  41. new_user.full_clean()
  42. except ValidationError as e:
  43. new_user.is_username_valid(e)
  44. return self.cleaned_data['username']
  45. def clean_email(self):
  46. new_user = User.objects.get_blank_user()
  47. new_user.set_email(self.cleaned_data['email'])
  48. try:
  49. new_user.full_clean()
  50. except ValidationError as e:
  51. new_user.is_email_valid(e)
  52. return self.cleaned_data['email']
  53. def clean_password(self):
  54. validate_password(self.cleaned_data['password'])
  55. new_user = User.objects.get_blank_user()
  56. new_user.set_password(self.cleaned_data['password'])
  57. try:
  58. new_user.full_clean()
  59. except ValidationError as e:
  60. new_user.is_password_valid(e)
  61. return self.cleaned_data['password']