Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import string
  2. import random
  3. from django.contrib.auth.forms import AuthenticationForm
  4. from django.utils.translation import ugettext_lazy as _
  5. from django import forms
  6. from django.contrib.auth.models import User
  7. def generate_username():
  8. uname = ''.join([random.choice(string.letters + string.digits + '_') for i in range(30)])
  9. try:
  10. User.objects.get(username=uname)
  11. return generate_username()
  12. except User.DoesNotExist:
  13. return uname
  14. class EmailAuthenticationForm(AuthenticationForm):
  15. """
  16. Extends the standard django AuthenticationForm, to support 75 character
  17. usernames. 75 character usernames are needed to support the EmailOrUsername
  18. auth backend.
  19. """
  20. username = forms.EmailField(label=_('Email Address'))
  21. class EmailUserCreationForm(forms.ModelForm):
  22. email = forms.EmailField(label=_('Email Address'))
  23. password1 = forms.CharField(label=_('Password'), widget=forms.PasswordInput)
  24. password2 = forms.CharField(label=_('Confirm Password'), widget=forms.PasswordInput)
  25. class Meta:
  26. model = User
  27. fields = ('email', )
  28. def clean_email(self):
  29. email = self.cleaned_data['email']
  30. try:
  31. User.objects.get(email=email)
  32. except User.DoesNotExist:
  33. return email
  34. raise forms.ValidationError(_("A user with that email address already exists."))
  35. def clean_password2(self):
  36. password1 = self.cleaned_data.get('password1', '')
  37. password2 = self.cleaned_data.get('password2', '')
  38. if password1 != password2:
  39. raise forms.ValidationError(_("The two password fields didn't match."))
  40. return password2
  41. def save(self, commit=True):
  42. user = super(EmailUserCreationForm, self).save(commit=False)
  43. user.set_password(self.cleaned_data['password1'])
  44. user.username = generate_username()
  45. if commit:
  46. user.save()
  47. return user