forms.py 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  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. max_length=15)
  12. email = forms.EmailField(label=_('E-mail address'),
  13. help_text=_("Working e-mail inbox is required to maintain control over your forum account."),
  14. max_length=255)
  15. email_rep = forms.EmailField(max_length=255)
  16. password = forms.CharField(label=_('Password'),
  17. help_text=_("Password you will be using to sign in to your account. Make sure it's strong."),
  18. max_length=255,widget=forms.PasswordInput)
  19. password_rep = forms.CharField(max_length=255,widget=forms.PasswordInput)
  20. captcha_qa = QACaptchaField()
  21. recaptcha = ReCaptchaField()
  22. accept_tos = forms.BooleanField(label=_("Forum Terms of Service"),
  23. required=True, widget=ForumTOS,
  24. error_messages={'required': _("Acceptation of board ToS is mandatory for membership.")})
  25. validate_repeats = (('email', 'email_rep'), ('password', 'password_rep'))
  26. repeats_errors = [{
  27. 'different': _("Entered addresses do not match."),
  28. },
  29. {
  30. 'different': _("Entered passwords do not match."),
  31. }]
  32. def __init__(self, *args, **kwargs):
  33. super(UserRegisterForm, self).__init__(*args, **kwargs)
  34. help_text_formats = {
  35. 'min': settings_lazy.username_length_min,
  36. 'max': settings_lazy.username_length_max,
  37. }
  38. self.fields['username'].help_text = _(
  39. "Your displayed username. Between %(min)s and %(max)s characters, only letters and digits are allowed.") % help_text_formats
  40. def finalize_form(self):
  41. if not settings.tos_url and not settings.tos_content:
  42. del self.fields['accept_tos']
  43. def clean_username(self):
  44. validate_username(self.cleaned_data['username'])
  45. new_user = User.objects.get_blank_user()
  46. new_user.set_username(self.cleaned_data['username'])
  47. try:
  48. new_user.full_clean()
  49. except ValidationError as e:
  50. new_user.is_username_valid(e)
  51. return self.cleaned_data['username']
  52. def clean_email(self):
  53. new_user = User.objects.get_blank_user()
  54. new_user.set_email(self.cleaned_data['email'])
  55. try:
  56. new_user.full_clean()
  57. except ValidationError as e:
  58. new_user.is_email_valid(e)
  59. return self.cleaned_data['email']
  60. def clean_password(self):
  61. validate_password(self.cleaned_data['password'])
  62. new_user = User.objects.get_blank_user()
  63. new_user.set_password(self.cleaned_data['password'])
  64. try:
  65. new_user.full_clean()
  66. except ValidationError as e:
  67. new_user.is_password_valid(e)
  68. return self.cleaned_data['password']