代码之家  ›  专栏  ›  技术社区  ›  NotSoShabby

继承自UserCreationForm的注册表中的密码不匹配

  •  0
  • NotSoShabby  · 技术社区  · 7 年前

    我有一个继承自 UserCreationForm . 文件如下所示:

    from django import forms
    from django.contrib.auth import password_validation
    from django.contrib.auth.forms import UserCreationForm
    from django.contrib.auth.models import User, Group
    
    from main.models.users import MyUser
    
    
    class MyUserCreationForm(UserCreationForm):
        email = forms.EmailField(required=True)
        group = forms.CharField(max_length=50, required=True)
        
        class Meta:
            model = MyUser
            fields = ("group", "email", "username", "email", "password1", "password2")
    
        def save(self, commit=True):
            user = super(MyUserCreationForm, self).save(commit=False)
            user.email = self.cleaned_data["email"]
            if commit:
                user.save()
            return user

    出于某种原因,当我试图填写表单时,会出现密码不匹配错误,如下所示:

    ERROR - {'password_mismatch': "The two password fields didn't match."}

    我试图在没有帮助的情况下重写clean_password1和clean_password2。代码:

    def clean_password1(self):
        password1 = self.cleaned_data.get('password1')
        try:
            password_validation.validate_password(password1, self.instance)
        except forms.ValidationError as error:
    
            # Method inherited from BaseForm
            self.add_error('password1', error)
        return password1
    

    你知道为什么会这样吗?为什么它认为我的两个密码不一样?我敢肯定,因为我试过无数次,甚至复制粘贴。

    视图:

    def register(request):
        if request.method == 'POST':
            form = MyUserCreationForm(request.POST)
            if form.is_valid():
                print(f"Valid form. Choosen group: {form.cleaned_data.get('group')}")
                user = form.save()
                group = Group.objects.get(name=form.cleaned_data.get('group'))
                user.groups.add(group)
                login(request, user)
                messages.success(request, f"Thanks, {form.cleaned_data.get('username')}, "
                f"for signing up as a {form.cleaned_data.get('group')} ")
                return redirect('main:homepage')
            else:
                logger.error(form.error_messages)
                for msg in form.error_messages:
                    messages.error(request, f'{msg}: {form.error_messages[msg]}')
                return render(request,
                              template_name='main/register.html',
                              context={'form': form})
        else:
            form = MyUserCreationForm()
            return render(request,
                          template_name='main/register.html',
                          context={'form': form})
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   VIVEK VIKASH    7 年前

    我不确定代码,但你可以试试这个

    from django.contrib.auth import login, authenticate
    from django.contrib.auth.forms import UserCreationForm
    from django.shortcuts import render, redirect
    def signup(request):
        if request.method == 'POST':
          #inhereting Usercreation form
          form = UserCreationForm(request.POST)
          if form.is_valid():
              form.save()
    
              #validating the password match while creating the user.
              username = form.cleaned_data.get('username')
              raw_password = form.cleaned_data.get('password1')
              user = authenticate(username=username, password=raw_password)
              login(request, user)
              return redirect('home')
       else:
         form = UserCreationForm()
      return render(request, 'signup.html', {'form': form})