【问题标题】:how to check passwords on coincidence?巧合时如何检查密码?
【发布时间】:2014-05-08 18:23:45
【问题描述】:

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

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>

问题是当用户进入时:

密码旧:qqq
密码1:q

密码2:qq

不是因为显示新密码“不匹配”的消息。

我需要输入不同的密码1和密码2显示错误信息验证'不匹配'

【问题讨论】:

  • 最后2行我其实没看懂,能解释一下吗?

标签: python django


【解决方案1】:

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

{{ form.non_field_errors }}

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-14
    • 1970-01-01
    • 2014-11-08
    • 2012-01-03
    • 2013-05-18
    • 2018-05-19
    相关资源
    最近更新 更多