作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用自定义表单来注册用户。我想验证确认密码。表单.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_name
和 last_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/
我正在开发一个网页,在其中显示有关绘画的信息。 我创建了一个名为“register.php”的网页,用户在订购绘画之前必须填写注册表。然后出现一个名为“details.php”的页面,要求用户输入更多
我正在处理一个网站的注册表单,我正在尝试将照片上传到服务器并将文件路径传递到数据库。 这可能只是一个简单的问题,因为我是 php 和 mysql 的初学者。 这是我的标准表单,我们称之为 regist
我是一名优秀的程序员,十分优秀!