|
@@ -0,0 +1,52 @@
|
|
|
|
|
+from django import forms
|
|
|
|
|
+from django.contrib.auth.forms import AuthentificationForm, UserCreationForm
|
|
|
|
|
+from users.models import User
|
|
|
|
|
+import re
|
|
|
|
|
+
|
|
|
|
|
+class RegisterForm(UserCreationForm):
|
|
|
|
|
+ username = forms.CharField(label="Логин", widget=forms.TextInput(attrs={"class": "form-control", "placeholder": "Введите логин"}))
|
|
|
|
|
+ full_name = forms.CharField(label="ФИО", widget=forms.TextInput(attrs={"class": "form-control", "placeholder": "Введите ФИО"}))
|
|
|
|
|
+ phone = forms.CharField(label="Номер телефона", widget=forms.TextInput(attrs={"class": "form-control", "placeholder": "8(900)000-00-00"}))
|
|
|
|
|
+ email = forms.CharField(label="Электронная почта", widget=forms.EmailInput(attrs={"class": "form-control", "placeholder": "Введите email"}))
|
|
|
|
|
+ password1 = forms.CharField(label="Пароль", widget=forms.PasswordInput(attrs={"class": "form-control", "placeholder": "Введите пароль"}))
|
|
|
|
|
+ password2 = forms.CharField(label="Подтверждение пароля", widget=forms.PasswordInput(attrs={"class": "form-control", "placeholder": "Подтвердите пароль"}))
|
|
|
|
|
+
|
|
|
|
|
+ class Meta:
|
|
|
|
|
+ model = User
|
|
|
|
|
+ fields = ["username", "full_name", "phone", "email", "password1", "password2", "role", "is_staff"]
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ def __init__(self, *args, **kwargs):
|
|
|
|
|
+ super().__init__(*args, **kwargs)
|
|
|
|
|
+ for field in self.fields.values():
|
|
|
|
|
+ field.help_text = ""
|
|
|
|
|
+
|
|
|
|
|
+ def clean_username(self):
|
|
|
|
|
+ username = self.cleaned_data["username"]
|
|
|
|
|
+ if not re.fullmatch(r"[A-Za-z0-9]{6, }"):
|
|
|
|
|
+ raise forms.ValidationError("Логин должен содержать минимум 6 символов, латинские буквы и цифры")
|
|
|
|
|
+ if User.objects.filter(username=username).exists():
|
|
|
|
|
+ raise forms.ValidationError("Такой логин уже существует")
|
|
|
|
|
+ return username
|
|
|
|
|
+
|
|
|
|
|
+ def clean_full_name(self):
|
|
|
|
|
+ full_name = self.cleaned_data["full_name"]
|
|
|
|
|
+ if not re.fullmatch(r"[А-Яа-яЁё\s]+", full_name):
|
|
|
|
|
+ raise forms.ValidationError("ФИО должно содержать кириллицу и пробелы")
|
|
|
|
|
+ return full_name
|
|
|
|
|
+
|
|
|
|
|
+ def clean_phone(self):
|
|
|
|
|
+ phone = self.cleaned_data["phone"]
|
|
|
|
|
+ if not re.fullmatch(r"8\d{3}-\d{2}-\d{2}"):
|
|
|
|
|
+ raise forms.ValidationError("Телефон должен иметь формат 8(000)-00-00")
|
|
|
|
|
+ return phone
|
|
|
|
|
+
|
|
|
|
|
+ def clean_email(self):
|
|
|
|
|
+ email = self.cleaned_data["email"]
|
|
|
|
|
+ if User.objects.filter(email=email).exists():
|
|
|
|
|
+ raise forms.ValidationError("Такой email уже существует")
|
|
|
|
|
+ return email
|
|
|
|
|
+
|
|
|
|
|
+class LoginForm(AuthentificationForm):
|
|
|
|
|
+ username = forms.CharField(label="", widget=forms.TextInput(attrs={"class": "form-control", "placeholder": "Введите логин"}))
|
|
|
|
|
+ password = forms.CharField(label="", widget=forms.PasswordInput(attrs={"class": "form-control", "placeholder": "Введите пароль"}))
|