Django Allauth 在注册页面中要求输入密码 3 次 Forms.py模型.pyAllauth 设置HTML 输出

问题描述

我正在尝试使用 django-allauth 实现一个注册表单,并且一切正常。但是我已经实现了一个 CustomUserCreationForm显示下面列出的字段,从那时起它已经要求输入密码 3 次。我只想要求输入一次密码,但现在似乎会自动添加密码和密码确认字段(见下图)。即使我删除了所有字段,两个密码字段仍然存在。在我的设置中,我已经设置了 ACCOUNT_SIGNUP_PASSWORD_ENTER_TWICE = False 但仍然显示密码字段三次。任何帮助将不胜感激!

Forms.py

from django.contrib.auth import get_user_model
from .models import CustomUser
from django.contrib.auth.forms import UserCreationForm,UserChangeForm


class CustomUserCreationForm(UserCreationForm):
    class Meta:
        model = get_user_model()
        fields = ("first_name","last_name","mobile","email","password")

模型.py

from django.contrib.auth.models import AbstractUser
from django.db import models


class CustomUser(AbstractUser):
    first_name = models.CharField(max_length=55,default="")
    last_name = models.CharField(max_length=55,default="")
    mobile = models.CharField(max_length=12,default="")

Allauth 设置

AUTH_USER_MODEL = "accounts.CustomUser"
SITE_ID = 1
AUTHENTICATION_BACKENDS = [
    "django.contrib.auth.backends.ModelBackend","allauth.account.auth_backends.AuthenticationBackend",]
EMAIL_BACKEND = "django.core.mail.backends.console.EmailBackend"
LOGIN_REDIRECT_URL = "home"
ACCOUNT_logoUT_REDIRECT = "home"
ACCOUNT_SESSION_REMEMBER = True
ACCOUNT_USERNAME_required = False
ACCOUNT_AUTHENTICATION_METHOD = "email"
ACCOUNT_EMAIL_required = True
ACCOUNT_UNIQUE_EMAIL = True
ACCOUNT_SIGNUP_PASSWORD_ENTER_TWICE = False
ACCOUNT_FORMS = {"signup": "accounts.forms.CustomUserCreationForm"}

HTML 输出

enter image description here

解决方法

试试这个:

class CustomUserCreationForm(UserCreationForm):
    
    class Meta(UserCreationForm.Meta):
        model = CustomUser
        fields = UserCreationForm.Meta.fields + ("first_name","last_name","mobile")

请注意,您只需要添加自定义字段。在您的情况下,您在密码已经存在时添加了密码 [1]。

关于 ACCOUNT_SIGNUP_PASSWORD_ENTER_TWICE,您使用的是哪个版本的 Django? ACCOUNT_SIGNUP_PASSWORD_VERIFICATION 是否有效?此设置用于预发布 0.26.0 (2016-07-24) [2]。

参考 [1]:https://docs.djangoproject.com/en/3.1/topics/auth/customizing/

参考 [2]:https://django-allauth.readthedocs.io/en/latest/release-notes.html?highlight=ACCOUNT_SIGNUP_PASSWORD_ENTER_TWICE#id60

,

您正在使用 django-allauth,如果您想使用 django-allauth 的设置,您必须从 SignupForm 导入 allauth

from allauth.account.forms import SignupForm

class CustomUserCreationForm(SignupForm):
    first_name = forms.CharField(max_length=55,label=_("First Name"))
    last_name = forms.CharField(max_length=55,label=_("Last Name"))
    mobile = forms.CharField(max_length=12,label=_("Mobile"))

    class Meta:
        fields = ("first_name","mobile","email","password")

    def save(self,request):

        # Ensure you call the parent class's save.
        # .save() returns a User object.
        user = super(MyCustomSignupForm,self).save(request)

        user.first_name = self.cleaned_data.get('first_name')
        user.last_name = self.cleaned_data.get('last_name')
        user.mobile = self.cleaned_data.get('mobile')
        user.save()

        # You must return the original result.
        return user

settings.py(面向未来的求职者):

ACCOUNT_FORMS = {"signup": "yourapp.forms.CustomUserCreationForm"}

另请参阅 django-allauth 文档。