forms.py 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. from django import forms
  2. from django.contrib.auth.forms import AuthentificationForm, UserCreationForm
  3. from users.models import User
  4. import re
  5. class RegisterForm(UserCreationForm):
  6. username = forms.CharField(label="Логин", widget=forms.TextInput(attrs={"class": "form-control", "placeholder": "Введите логин"}))
  7. full_name = forms.CharField(label="ФИО", widget=forms.TextInput(attrs={"class": "form-control", "placeholder": "Введите ФИО"}))
  8. phone = forms.CharField(label="Номер телефона", widget=forms.TextInput(attrs={"class": "form-control", "placeholder": "8(900)000-00-00"}))
  9. email = forms.CharField(label="Электронная почта", widget=forms.EmailInput(attrs={"class": "form-control", "placeholder": "Введите email"}))
  10. password1 = forms.CharField(label="Пароль", widget=forms.PasswordInput(attrs={"class": "form-control", "placeholder": "Введите пароль"}))
  11. password2 = forms.CharField(label="Подтверждение пароля", widget=forms.PasswordInput(attrs={"class": "form-control", "placeholder": "Подтвердите пароль"}))
  12. class Meta:
  13. model = User
  14. fields = ["username", "full_name", "phone", "email", "password1", "password2", "role", "is_staff"]
  15. def __init__(self, *args, **kwargs):
  16. super().__init__(*args, **kwargs)
  17. for field in self.fields.values():
  18. field.help_text = ""
  19. def clean_username(self):
  20. username = self.cleaned_data["username"]
  21. if not re.fullmatch(r"[A-Za-z0-9]{6, }"):
  22. raise forms.ValidationError("Логин должен содержать минимум 6 символов, латинские буквы и цифры")
  23. if User.objects.filter(username=username).exists():
  24. raise forms.ValidationError("Такой логин уже существует")
  25. return username
  26. def clean_full_name(self):
  27. full_name = self.cleaned_data["full_name"]
  28. if not re.fullmatch(r"[А-Яа-яЁё\s]+", full_name):
  29. raise forms.ValidationError("ФИО должно содержать кириллицу и пробелы")
  30. return full_name
  31. def clean_phone(self):
  32. phone = self.cleaned_data["phone"]
  33. if not re.fullmatch(r"8\d{3}-\d{2}-\d{2}"):
  34. raise forms.ValidationError("Телефон должен иметь формат 8(000)-00-00")
  35. return phone
  36. def clean_email(self):
  37. email = self.cleaned_data["email"]
  38. if User.objects.filter(email=email).exists():
  39. raise forms.ValidationError("Такой email уже существует")
  40. return email
  41. class LoginForm(AuthentificationForm):
  42. username = forms.CharField(label="", widget=forms.TextInput(attrs={"class": "form-control", "placeholder": "Введите логин"}))
  43. password = forms.CharField(label="", widget=forms.PasswordInput(attrs={"class": "form-control", "placeholder": "Введите пароль"}))