Django регистрация пользователя
Помогите исправить ошибку. Изучаю django по книге Дронова, "Практика создания веб сайтов". При регистрации нового пользователя выдает ошибку.
forms.py
from .models import AdvUser
from django.contrib.auth import password_validation
from django.core.exceptions import ValidationError
from .apps import user_registered
class ChangeUserInfoForm(forms.ModelForm):
email = forms.EmailField(required=True, label='адрес электронной почты')
class Meta:
model = AdvUser
fields = ('username', 'email', 'first_name', 'last_name', 'send_messages')
class RegisterUserForm(forms.ModelForm):
email = forms.EmailField(required=True, label='адрес электронной почты')
password1 = forms.CharField(label='пароль', widget=forms.PasswordInput, help_text=password_validation.password_validators_help_text_html())
password2 = forms.CharField(label='пароль (повторно)', widget=forms.PasswordInput, help_text='повторите пожалуйста пароль')
def clean_password1(self):
password1 = self.cleaned_data['password1']
if password1:
password_validation.validate_password(password1)
return password1
def clean(self):
super().clean()
password1 = self.cleaned_data['password1']
password2 = self.cleaned_data['password2']
if password1 and password2 and password1 != password2:
errors = {'password2': ValidationError('введенные пароли не совпадают', code='password_mismatch')}
raise ValidationError(errors)
def save(self, commit=True):
user = super().save(commit=False)
user.set_password(self.cleaned_data['password1'])
user.is_active = False
user.is_activated = False
if commit:
user.save()
user_registered.send(RegisterUserForm, instance=user)
return user
class Meta:
model = AdvUser
fields = ('username', 'email', 'password1', 'password2', 'first_name', 'last_name', 'send_messages')
apps.py
from django.apps import AppConfig
from django.dispatch import Signal
from .utilities import send_activation_notification
class MainConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'main'
verbose_name = 'Доска обьявлений'
def user_registered():
return None
user_registered = Signal(providing_args=['instance'])
def user_registered_dispatcher(sender, **kwargs):
send_activation_notification(kwargs['instance'])
user_registered.connect(user_registered_dispatcher)```
В django и так есть валидация паролей, так что, мне кажется, лучше просто проверять, совпадает ли первый пароль со вторым
Пример:
# Регистрация
class UserRegistrationForm(forms.ModelForm):
password = forms.CharField(label='пароль', widget=forms.PasswordInput)
password2 = forms.CharField(label='подтвердите пароль', widget=forms.PasswordInput)
class Meta:
model = User
fields = ('username', 'first_name', 'email')
def clean_password2(self):
cd = self.cleaned_data
if cd['password'] != cd['password2']:
raise forms.ValidationError('Пароли не совпадают')
return cd['password2']`