django регистрация пользователя
Помогите исправить ошибку. Изучаю django по книге Дронова, "Практика создания веб сайтов". При регистрации нового пользователя выдает ошибку.
forms.py
from django import forms
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.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)
Ответы (1 шт):
Автор решения: Юрий Кравцов
→ Ссылка
В 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']`
