请帮助修复验证密码更改表单。
urls.py:
url(r'^userprofile/password_page/$', 'views.password_page', name='password_page', ),
url(r'^userprofile/password_page_changed/$', 'views.password_page_changed', ),
views.py:
@login_required
def password_page(request):
if request.method == 'POST':
form = ChangePasswordForm(data=request.POST, request=request)
if form.is_valid():
username = User.objects.get(username__exact=request.user.username)
username.set_password(form.cleaned_data.get('password1'))
username.save()
return HttpResponseRedirect('/userprofile/password_page_changed/')
else:
form = ChangePasswordForm(request=request)
t = loader.get_template('password_page.html')
c = RequestContext(request, {
'form': form,
}, [custom_proc])
return HttpResponse(t.render(c))
forms.py:
class ChangePasswordForm(forms.Form):
password_old = forms.CharField(max_length=30, widget=forms.PasswordInput())
password1 = forms.CharField(widget=forms.PasswordInput())
password2 = forms.CharField(widget=forms.PasswordInput())
def __init__(self, *args, **kwargs):
self.request = kwargs.pop('request', None)
super(ChangePasswordForm, self).__init__(*args, **kwargs)
def clean_password_old(self):
cleaned_data = self.cleaned_data
password_old = cleaned_data.get("password_old")
if not self.request.user.check_password(password_old):
raise forms.ValidationError("not true pass.")
else:
return password_old
def clean(self):
cleaned_data = self.cleaned_data
password1 = cleaned_data.get("password1")
password2 = cleaned_data.get("password2")
if password1 != password2:
raise forms.ValidationError("not match.")
else:
return cleaned_data
password_page.html:
<form class="password_form common_form" action="{% url 'password_page' %}" method="POST">
{% csrf_token %}
<div class="cell">
<label class="label">{{ form.password_old.label }}</label>
{{ form.password_old }}
{{ form.password_old.errors }}
</div>
<div class="cell">
<label class="label">{{ form.password1.label }}</label>
{{ form.password1 }}
{{ form.password1.errors }}
</div>
<div class="cell">
<label class="label">{{ form.password2.label }}</label>
{{ form.password2 }}
{{ form.password2.errors }}
</div>
<div class="cell">
<input class="submit btn btn-info" type="submit" value="Изменить" />
</div>
</form>
问题是当用户输入:
password_old:qqq
password1:qpassword2:qq
不是因为显示新密码与“#39;”不符的消息。
我需要输入不同的密码1和密码2显示错误消息验证&#39;不匹配&#39;
答案 0 :(得分:1)
密码不匹配错误在form.non_field_errors集合中。您可以通过以下方式访问它:
{{ form.non_field_errors }}
如果要显示特定字段,可以执行以下操作。这将为两个密码字段提高它。
raise ValidationError({
'password1': ["Passwords must match.",],
'password2': ["Passwords must match.",]
})