forms.py 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. from .models import *
  2. import re
  3. from django import forms
  4. from django.contrib.auth import password_validation
  5. from django.core.exceptions import ValidationError
  6. from django.forms import ModelForm
  7. class ProductCreate(ModelForm):
  8. class Meta:
  9. model = Product
  10. fields = ('name', 'desc', 'title', 'image')
  11. class RegisterUserForm(ModelForm):
  12. email = forms.EmailField(required=True,
  13. label='Адрес электронной почты')
  14. password1 = forms.CharField(label='Пароль',
  15. widget=forms.PasswordInput,
  16. help_text=password_validation.password_validators_help_text_html())
  17. password2 = forms.CharField(label='Пароль (повторно)',
  18. widget=forms.PasswordInput,
  19. help_text='Повторите тот же самый пароль еще раз')
  20. def clean(self):
  21. super().clean()
  22. password1 = self.cleaned_data['password1']
  23. password2 = self.cleaned_data['password2']
  24. if password1 and password2 and password1 != password2:
  25. errors = {'password2': ValidationError(
  26. 'Введенные пароли не совпадают', code='password_mismatch'
  27. )}
  28. raise ValidationError(errors)
  29. def save(self, commit=True):
  30. user = super().save(commit=False)
  31. user.set_password(self.cleaned_data['password1'])
  32. if commit:
  33. user.save()
  34. return user
  35. def clean_name(self):
  36. name = self.cleaned_data['name']
  37. if not re.match(r'^[а-яА-Я\s-]+$', name):
  38. raise ValidationError("ФИО может содержать только кириллицу, дефис и пробелы. ")
  39. return name
  40. def clean_login(self):
  41. username = self.cleaned_data['username']
  42. if not re.match(r'^[a-zA-Z\s-]+$', username):
  43. raise ValidationError("Логин может содержать только латиницу и дефис. ")
  44. if AdvUser.objects.filter(username=username).exists():
  45. raise ValidationError("Пользователь с таким логином уже существует. ")
  46. return username
  47. class Meta:
  48. model = AdvUser
  49. fields = ('username', 'name', 'email', 'password1', 'password2')