我制作了一个继承自
UserCreationForm
的表单,并使用继承CreateView
的基于类的视图,当我使用runserver并显示表单时,底部有一个部分基于密码的身份验证,我没有通知
from django.contrib.auth import get_user_model
from django.contrib.auth.forms import UserCreationForm
class RegisterForm(UserCreationForm):
"""Form to Create new User"""
class Meta:
model = get_user_model()
fields = ["username", "password1", "password2"]
from django.views.generic import CreateView
from .forms import RegisterForm
from django.urls import reverse_lazy
class SignUp(CreateView):
form_class = RegisterForm
template_name = "register.html"
success_url = reverse_lazy("core:Login")
def form_valid(self, form):
user = form.save()
if user:
login(self.request, user)
return super().form_valid(form)
<h1>signup</h1>
{{form}}
当我运行代码时,我看到了这个输出
所以我没想到基于密码的身份验证。
从 Django 版本 5.1 开始,
UserCreationForm
默认有一个 usable_password
字段。这与 Django 为用户设置不可用的密码的功能有关。如果您使用某种外部身份验证单点登录或 LDAP,这非常有用。
由于您的表单似乎是面向用户的,并且您似乎没有意识到向您的用户显示此字段没有多大意义,您应该简单地通过将其设置为
None
从表单中删除该字段
:
class RegisterForm(UserCreationForm):
"""Form to Create new User"""
usable_password = None
class Meta:
model = get_user_model()
fields = ["username", "password1", "password2"]