gpt4 book ai didi

django - 定制登记表。确认密码

转载 作者:行者123 更新时间:2023-12-03 08:52:53 25 4
gpt4 key购买 nike

我使用自定义表单来注册用户。我想验证确认密码。表单.py:

class RegistrationForm(UserCreationForm):
'''Register for new users'''
email = forms.EmailField(required=True)
first_name = forms.CharField(required=True)
last_name = forms.CharField(required=True)

class Meta:
model = get_user_model()
fields = {'username', 'password1', 'password2', 'email', 'first_name', 'last_name'}

def save(self, commit=True):
user = super(RegistrationForm, self).save(commit=False)
user.email = self.cleaned_data['email']
user.first_name = self.cleaned_data['first_name']
user.last_name = self.cleaned_data['last_name']

if commit:
user.save()

return user

模板:

<div class="input-group register">
{{ form.password.errors }}
<label for="id_password1">Password: </label>
{{ form.password1 }}
</div>
<div class="input-group register">
{{ form.password.errors }}
<label for="id_password2">Confirm password: </label>
{{ form.password2 }}
</div>

View .py

def registration_view(request):
context = {}
context.update(csrf(request))
context['form'] = RegistrationForm()

if request.method == 'POST':
form = RegistrationForm(request.POST)
if form.is_valid():
form.save()
newuser = auth.authenticate(
username=form.cleaned_data['username'],
password=form.cleaned_data['password2']
)
auth.login(request, newuser)
return redirect('home')
else:
context['form'] = form

return render(request, '/registration.html', context)

如何添加密码验证(也确认密码)?

最佳答案

您继承自 UserCreationForm [GitHub] 。此表单已为您完成此操作。

确实:clean_password2 将验证两个密码是否相同:

    def <b>clean_password2</b>(self):
password1 = self.cleaned_data.get("password1")
password2 = self.cleaned_data.get("password2")
if password1 and password2 and <b>password1 != password2</b>:
raise forms.ValidationError(
self.error_messages['password_mismatch'],
code='password_mismatch',
)
return password2

_post_clean 函数将验证密码是否为有效密码:

    def _post_clean(self):
super()._post_clean()
# Validate the password after self.instance is updated with form data
# by super().
password = self.cleaned_data.get('password2')
if password:
try:
<b>password_validation.validate_password(password, self.instance)</b>
except forms.ValidationError as error:
self.add_error('password2', error)

最后在save()中它将使用.set_password()来设置密码。这是必要的,因为 Django 的 User 模型将像任何好的用户模型一样对密码进行哈希处理。

    def save(self, commit=True):
user = super().save(commit=False)
user.<b>set_password(self.cleaned_data["password1"])</b>
if commit:
user.save()
return user

因此您不应该干涉这些。您在这里只想添加 first_namelast_name。因此,您可以添加该逻辑:

class RegistrationForm(UserCreationForm):
'''Register for new users'''
<b>email</b> = forms.EmailField(required=True)
<b>first_name</b> = forms.CharField(required=True)
<b>last_name</b> = forms.CharField(required=True)

class Meta:
model = get_user_model()
fields = <b>['username', 'email', 'first_name', 'last_name']</b>

仅此而已,因为 ModelForm 会处理这些事情。

请注意,在您的 View 中,authenticate 可能不是必需的,因为如果您构造一个用户,它应该进行身份验证。您只需在此处登录即可:

def registration_view(request):
context = {}
context.update(csrf(request))
if request.method == 'POST':
form = RegistrationForm(request.POST)
if form.is_valid():
<b>newuser</b> = form.save()
auth.login(request, newuser)
return redirect('home')
else:
form = RegistrationForm()
context['form'] = form
return render(request, '/registration.html', context)

关于django - 定制登记表。确认密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57852131/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com