Django:SetPasswordForm对您无效

2024-10-06 12:37:24 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我第一次使用SetPasswordForm。表单无效,但不显示错误消息。所以我很难找出哪个部分出了问题。在

在网址.py在

url(r'^password_change/(?P<username>[-\w.]+)/$', views.password_change, name='password_change'),
url(r'^password_change_done/$', views.password_change_done, name='password_change_done'),

当用户输入新密码,如果操作成功,页面将重定向到“密码更改完成”。在

在视图.py在

^{pr2}$

在表单.py在

class PasswordChangeForm(SetPasswordForm):
    error_messages = dict(SetPasswordForm.error_messages, **{
    'password_incorrect': ("Your old password was entered incorrectly. Please enter it again."),
    })
    oldpassword = forms.CharField(
        label=("Old password"),
        strip=False,
        widget=forms.PasswordInput(attrs={'autofocus': True}),
    )
    field_order = ['oldpassword', 'password1', 'password2']
    def __init__(self, user, data, **kwargs):
        self.user = user
        super(PasswordChangeForm, self).__init__(data, **kwargs)
    def clean_oldpassword(self):
        oldpassword = self.cleaned_data["oldpassword"]
        if not self.user.check_password(oldpassword):
            raise forms.ValidationError(
                self.error_messages['password_incorrect'],
                code='password_incorrect',
            )
        return oldpassword

在模板.py在

{{ form.errors }}
{{ form.non_field_errors }}
{% if error_message %}
    <h2><strong>{{ error_message }}</strong></h2>
{% else %}<br>
{% endif %}
<form class="form-horizontal" role="form" action="{% url 'blog:password_change' user.username %}" method="post" enctype="multipart/form-data">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit" class="button-primary">submit</button></div>
</form>

我把{表格错误}}和{表单非字段错误}}所以如果发生错误,它可以在网站上显示错误信息。然而,到目前为止,并没有消息显示,似乎什么也没有发生,每当用户点击提交按钮。在


Tags: pyselfformurl表单data错误error
1条回答
网友
1楼 · 发布于 2024-10-06 12:37:24

这里有很多问题,但主要的问题——正如我之前告诉过你的——是如何将东西传递给模板的。您需要遵循文档中所示的模式,并且在变量命名方面需要保持一致性。在

首先,将您的密码检查移到表单本身:

class PasswordChangeForm(SetPasswordForm):
    ...
    def clean(self):
        password1 = self.cleaned_data.get('password1')
        password2 = self.cleaned_data.get('password2')
        if password1 1= password2:
            raise forms.ValidationError('password mismatch')

现在,修复您的视图:

^{pr2}$

最后,从模板中删除{{ error_messages }}。在

相关问题 更多 >