django - PasswordChangeForm 永远无效,模板中始终存在错误消息
问题描述
我正在尝试在我的 Django 2.1.7 webapp 中实现密码更改功能。即使我使用GET
更改密码页面的请求,模板中也会出现这两个错误:
两个密码字段不匹配。您的旧密码输入错误。请重新输入。
此外,当我POST
使用表单数据时,form.is_valid()
总是返回 false,即使我可以确认错误消息(与上面列出的相同)是错误的。
除非我手动输入,否则表单页面不会给出错误消息。
我已经尝试过这里的解决方案和许多类似的解决方案。据我所知,我的逻辑是一样的。
看法
def change_password(request):
args = {}
if request.method == "POST":
form = PasswordChangeForm(data=request.POST, user=request.user)
if form.is_valid():
form.save()
# Keep the user logged in after they change their password.
update_session_auth_hash(request, form.user)
return redirect("manager:profile")
else:
print("INVALID PASSWORD")
print(form.error_messages)
else:
form = PasswordChangeForm(request.user)
args["form"] = form
return render(request, "manager/change_password.html", args)
模板
<head>
{% extends 'manager/base.html' %}
{% block title %}
Change Password: {{ user.username }}
{% endblock %}
</head>
{% block body %}
{% if form.error_messages %}
{% for error, error_message in form.error_messages.items %}
<b>{{ error_message }}</b><br>
{% endfor %}
{% endif %}
<form method="POST">
{% csrf_token %}
{{ form.as_p }}
<br>
<button class="btn grey darken-3" type="submit">Save Changes</button>
</form>
{% endblock %}
我怎样才能: 1. 获取密码更改功能以正确验证?2. 仅显示由 ? 产生的有效错误消息POST
?
解决方案
您可以使用类视图 PasswordChangeView。它旨在与 PasswordChangeForm 一起使用。
在您的表格中,它可能与以下内容有关:
# from PasswordChangeForm(SetPasswordForm):
def clean_old_password(self):
"""
Validate that the old_password field is correct.
"""
old_password = self.cleaned_data["old_password"]
if not self.user.check_password(old_password):
raise forms.ValidationError(
self.error_messages['password_incorrect'],
code='password_incorrect',
)
return old_password
也许在 form.is_valid 方法之前手动运行这个方法???对不起,不能评论。没有足够的积分..
推荐阅读
- ios - 如何更改 UISearchbar 中文本的 fontSize?
- android - KeyboardVisibilityPlugin - 简单名称已定义
- git - Gitlab runner 无法使用来自 ~/.docker/config.json 的凭据进行身份验证
- python - 使用 selenium Web 驱动程序在 python 中解析 URL
- python - 谁能告诉我这个二进制搜索代码哪里出错了?无法向用户打印索引
- twilio - Twilio Ougoing 语音呼叫:令牌不允许首次尝试拨出电话
- angular - Angular 8 测试时无法获取 Injector
- python - `tf.nn.space_to_depth` 是否有等效的 PyTorch 函数
- android - 无论在android中垂直对齐的字数如何,如何为多个文本视图设置相等的宽度?
- javascript - JS 保留以零结尾的小数