forms.py 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import floppyforms as forms
  2. from django.core.exceptions import ValidationError
  3. from django.utils.translation import ugettext_lazy as _
  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']