Формы электронной почты не совпадают в Django Custom-User регистрация - PullRequest
0 голосов
/ 16 марта 2020

Я настраиваю пользовательскую регистрационную форму для создания учетной записи в моем Django проекте. Я чувствую, что мне не хватает чего-то очень простого, что мешает мне зарегистрироваться по какой-то причине. Моя форма регистрации требует 4 поля для заполнения, прежде чем новый пользователь может зарегистрироваться. Из этих 4 полей два являются только подтверждением адреса электронной почты.

Вот копия моего form.py:

class UserRegisterForm(forms.ModelForm):
    username = forms.CharField(label='Username')
    email = forms.EmailField(label='Email Address')
    email2 = forms.EmailField(label='Confirm Email')
    password = forms.CharField(widget=forms.PasswordInput)

    class Meta:
        model = CustomUser
        fields = ['username', 'email', 'email2', 'password']

    def clean_email(self):
        email = self.cleaned_data.get('email')
        email2 = self.cleaned_data.get('email2')
        if email != email2:
            raise forms.ValidationError("Emails do not match")

А вот копия моего view.py :

def register_view(request):
    next = request.GET.get('next')
    form = UserRegisterForm(request.POST or None)
    if form.is_valid():
        user = form.save(commit=False)
        password = form.cleaned_data.get('password')
        user.set_password(password)
        user.save()
        new_user = authenticate(username=user.username, password=password)
        login(request, new_user)
        if next:
            return redirect(next)
        return redirect('/home/')
    context = {'form':form, "title":"register"}
    return render(request, "register.html", context)

Вот мой html файл:

<h2><center><font color="white">Register Here:</font></center></h2>
    <form method="POST"><center>
        {% csrf_token %}
        {{form}}
      <input type="submit" />
    </center></form>

Всякий раз, когда я пытаюсь зарегистрироваться в качестве нового пользователя, возникает ошибка проверки формы, которая говорит о том, что мои два электронных письма не совпадают (я копирую и вставляю их, чтобы убедиться, что они идентичны).

Я чувствую, что мне не хватает того, что находится прямо у меня под носом ...

Приветствую всех вас и большое спасибо.

Ответы [ 2 ]

1 голос
/ 16 марта 2020

попробуйте

def register_view(request):
    next = request.GET.get('next')
    form = UserRegisterForm(request.POST or None)
    if form.is_valid():
       email = form.cleaned_data.get('email')
       email1 = form.cleaned_data.get('email1')
        if email1 == email 
           user = form.save(commit=False)
           password = form.cleaned_data.get('password')
           user.set_password(password)
           user.save()
           new_user = authenticate(username=user.username, password=password)
           login(request, new_user)
              if next:
                 return redirect(next)
          else:
             ….
0 голосов
/ 16 марта 2020

    def clean(self):
        cleaned_data = super(UserRegisterForm, self).clean()
        email = cleaned_data.get('email')
        email2 = cleaned_data.get('email2')
        if email != email2:
            self.add_error("email", "Emails do not match")

Проблема в том, что в методе clean_email у вас есть email2, чтобы всегда быть None. Для сравнения двух или более полей используйте clean метод

...