如何在巧合上检查密码?

时间:2014-05-08 18:23:45

标签: python django

请帮助修复验证密码更改表单。

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:q

     

password2:qq

不是因为显示新密码与“#39;”不符的消息。

我需要输入不同的密码1和密码2显示错误消息验证&#39;不匹配&#39;

1 个答案:

答案 0 :(得分:1)

密码不匹配错误在form.non_field_errors集合中。您可以通过以下方式访问它:

{{ form.non_field_errors }}

如果要显示特定字段,可以执行以下操作。这将为两个密码字段提高它。

raise ValidationError({
    'password1': ["Passwords must match.",],
    'password2': ["Passwords must match.",]
})