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": "Введите пароль"}))