/zavtra/siteuser/forms.py

https://github.com/H359/ZavtraRu · Python · 46 lines · 38 code · 6 blank · 2 comment · 3 complexity · e8f9bbf9235f6f9d2a6bef8020da4c9e MD5 · raw file

  1. # -*- coding: utf-8 -*-
  2. from datetime import datetime
  3. from django import forms
  4. from django.db.models import Q
  5. from django.contrib.auth.models import User
  6. from django.forms.extras.widgets import SelectDateWidget
  7. from django.forms.widgets import RadioFieldRenderer
  8. from django.core.validators import RegexValidator, MinLengthValidator
  9. from django.utils.safestring import mark_safe
  10. from django.utils.encoding import force_unicode
  11. from captcha.fields import ReCaptchaField
  12. from fields import DualPasswordField
  13. from models import SiteProfile
  14. class ZRadioRenderer(RadioFieldRenderer):
  15. def render(self):
  16. return mark_safe(u'<ul class="inputs-list">\n%s\n</ul>' % u'\n'.join([u'<li>%s</li>' % force_unicode(w) for w in self]))
  17. class RegistrationForm(forms.Form):
  18. username = forms.CharField(max_length=30, label=u'Имя пользователя', validators=[RegexValidator(r'^[\w.@+-]+$')])
  19. password = DualPasswordField(label=u'Пароль')
  20. email = forms.EmailField(label=u'Электронная почта')
  21. gender = forms.ChoiceField(label=u'Пол', widget=forms.RadioSelect(renderer=ZRadioRenderer), choices=SiteProfile.GENDER)
  22. dob = forms.DateField(label=u'Дата рождения', widget=SelectDateWidget(years=range(1900, datetime.now().year - 15)))
  23. location = forms.CharField(label=u'Страна, город', required=False)
  24. occupation = forms.CharField(label=u'Род занятий', required=False)
  25. about = forms.CharField(label=u'О себе', widget=forms.Textarea(attrs={'rows': 10, 'class': 'xxlarge'}), required=False)
  26. #captcha = ReCaptchaField(label=u'Проверим вашу человечность', attrs={'theme':'clean'}, help_text=u'Введите слова с картинки')
  27. def clean(self):
  28. cleaned_data = self.cleaned_data
  29. email = cleaned_data.get('email')
  30. username = cleaned_data.get('username')
  31. if User.objects.filter(Q(username=username) | Q(email=email)).count() > 0:
  32. print 'w00t?'
  33. raise forms.ValidationError(u'Такое имя пользователя или электронную почту использовать, к сожалению, нельзя.')
  34. return cleaned_data
  35. def clean_password(self):
  36. data = self.cleaned_data.get('password')
  37. data = data.strip()
  38. if len(data) < 5:
  39. raise forms.ValidationError(u'Длина пароля должна быть не менее 5 символов')
  40. return data