timofeydeys
@timofeydeys
Свобода творцов

Django как создать юзера с расширенной моделью?

Добрый вечер! Вопрос собственно в шапке.
Сделал модель по гайду: dunmaksim.blogspot.ru/2015/05/django-18.html

И вот есть вопрос. Я только изучаю django еще.
Весь интернет перерыл.
Я смог сделать вход через registration redux
а теперь.

Покажите пожалуйста кодом желательно, как мне регистрировать пользователей?
Т.е. с обычной формой регистрации. И еще, не хочу что бы письмо активации на почту прилетало. Можно же убрать?

Спасибо большое
  • Вопрос задан
  • 507 просмотров
Решения вопроса 1
gordon_shamway
@gordon_shamway
class UserRegistrationForm(forms.ModelForm):
    password = forms.CharField(label='Password', widget=forms.PasswordInput)
    password2 = forms.CharField(label='Repeat password', 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('Passwords don\'t match.')
        return cd['password2']

view
def register(request):
    if request.method == 'POST':
        user_form = UserRegistrationForm(request.POST)

        if user_form.is_valid():
            # Create a new user object but avoid saving it yet
            new_user = user_form.save(commit=False)
            # Set the chosen password
            new_user.set_password(user_form.cleaned_data['password'])
            # Save the User object
            new_user.save()
            return render(request,
                          'template_done.html',
                          {'new_user': new_user})
    else:
        user_form = UserRegistrationForm()
    return render(request, 'template.html', {'user_form': user_form})
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
timofeydeys
@timofeydeys Автор вопроса
Свобода творцов
Вот мой код, если кому интересно
forms.py
class UserCreationForm(forms.ModelForm):
    password1 = forms.CharField(
        label='passwd',
        widget=forms.PasswordInput(attrs={
            'style':'margin:10px; padding:10px;height:40px',
            'class':'form-control col-sm-8',
                'placeholder': 'Password please'
        })
    )
    password2 = forms.CharField(
        label='double passwd',
        widget=forms.PasswordInput(attrs={
            'style':'margin:10px; padding:10px;height:40px',
            'class':'form-control col-sm-8',
                'placeholder': 'Double password please'
        })
    )

    def clean_password2(self):
        password1 = self.cleaned_data.get('password1')
        password2 = self.cleaned_data.get('password2')
        if password1 and password2 and password1 != password2:
            raise forms.ValidationError('Passwd and double passwd error')
        return password2


    def save(self, commit=True):
        user = super(UserCreationForm, self).save(commit=False)
        user.set_password(self.cleaned_data['password1']) # важно тут передавать password1 или 2. Но не password как в примере выше
        if commit:
            user.save()
        return user
    

    class Meta:
        model = get_user_model()
        fields = ('email', 'lastname', 'firstname')
        widgets = {
            'email': forms.TextInput(attrs={
                'style':'margin:10px; padding:10px;height:40px',
                'class':'form-control col-sm-8',
                'placeholder': 'E-mail please'
            }),
            'lastname': forms.TextInput(attrs={
                'style':'margin:10px; padding:10px;height:40px',
                'class':'form-control col-sm-8',
                'placeholder': 'Lastname please'
            }),
            'firstname': forms.TextInput(attrs={
                'style':'margin:10px; padding:10px;height:40px',
                'class':'form-control col-sm-8',
                'placeholder': 'Firstname please'
            }),
        }


Вот вьюха:
def registerPost(request):
    if request.method == "POST":
        user_form = UserCreationForm(request.POST)
        
        if user_form.is_valid():
            new_user = user_form.save(commit=False)
            new_user.set_password(user_form.cleaned_data['password1'])
            new_user.avatar = "fotos/no_image_dummy.png"
            new_user.save()
            return HttpResponseRedirect("/login")
    else:
        user_form = UserCreationForm()
    return render(request, 'register.html', {'form':user_form})
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы