Django ошибка form.validation не отображается - PullRequest
0 голосов
/ 30 января 2020

Я пытаюсь создать регистрационную форму, используя djangos, встроенный в User. Я хотел бы иметь поле пароля, а затем второе поле для проверки совпадения паролей (имейте в виду, что это новый пользователь, поэтому в базе данных еще нет пароля). Я думаю, что я действительно близок, и мне кажется, что мне нужна ошибка проверки, чтобы перейти от формы к представлению. Форма просто очищает наши пароли ... и оставляет оставшиеся введенные данные, но ошибки проверки не выдается вообще. Любые мысли и помощь с благодарностью!

Форма

class UserForm(forms.ModelForm):
    password = forms.CharField(widget=forms.PasswordInput())
    ver_password = forms.CharField(widget=forms.PasswordInput(attrs={'placeholder': ' confirm password'}))
    ver_email = forms.EmailField(widget=forms.EmailInput(attrs={'placeholder': ' confirm email'}))

    class Meta():
        model = User
        fields = ('username',
                  'password',
                  'first_name',
                  'last_name',
                  'email')

    def clean(self):
        all_clean_data = super().clean()
        clean_email = all_clean_data['email']
        clean_ver_email = all_clean_data['ver_email']
        clean_password = all_clean_data['password']
        clean_ver_password = all_clean_data['ver_password']

        if clean_email != clean_ver_email:
            raise forms.ValidationError("Emails do not match")
        if clean_password != clean_ver_password:
            raise forms.ValidationError("Passwords do not match")

        return all_clean_data

Просмотр

def register(request):

    registered = False
    newregister = False

    if request.method == 'POST':
        user_form = UserForm(data=request.POST)
        profile_form = UserProfileInfoForm(data=request.POST)

        if user_form.is_valid() and profile_form.is_valid():

            user = user_form.save()
            user.set_password(user.password)
            user.save(update_fields=['username','password','first_name','last_name','email'])

            profile = profile_form.save(commit=False)
            profile.user = user

            if 'profile_pic' in request.FILES:
                profile.profile_pic = request.FILES['profile_pic']

            profile.save()

            registered = True
            newregister = True
            return render(request, 'dai_members_app/login.html',
                                    {'user_form':user_form,
                                      'profile_form':profile_form,
                                      'registered':registered})
        else:
            print(user_form.errors,profile_form.errors)

1 Ответ

0 голосов
/ 30 января 2020

Ваше мнение ничего не возвращает, если формы недействительны. Он возвращает ответ только в том случае, если формы действительны, поэтому «Форма просто очищает наши пароли ... и оставляет оставшиеся введенные данные»

Во-вторых, ваше представление необычно, поскольку обычно представление формы обрабатывает как запрос GET (отображение пустой формы), так и запрос POST (проверка и сохранение входящих данных). Если у вас нет веских причин делать что-то другое, вы должны придерживаться стандартных шаблонов Django, по крайней мере, пока изучаете основы.

Пожалуйста, см. Пример в документации Django для функционального представления для обработка формы: https://docs.djangoproject.com/en/dev/topics/forms/#the -view

Стоит отметить, что Django уже предоставляет форму для регистрации пользователя: from django.contrib.auth.forms import UserCreationForm. Вы должны использовать это вместо того, чтобы кататься самостоятельно, если вам не нужно делать что-то особенное, на что это не похоже.

Учебное пособие здесь также является хорошей отправной точкой: https://simpleisbetterthancomplex.com/tutorial/2017/02/18/how-to-create-user-sign-up-view.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...