我正在尝试在Django 2.1.7 Webapp中实现密码更改功能。即使我在更改密码页面上使用GET
请求,模板中也存在以下两个错误:
两个密码字段不匹配。 您的旧密码输入错误。请再次输入。
此外,当我POST
格式的数据时,form.is_valid()
总是返回false,即使我可以确认错误消息(上面列出的错误消息)都是false。
除非手动输入,否则表单页面不会显示任何错误消息。
我已经尝试了解决方案here和许多类似的解决方案。据我所知,我的逻辑是相同的。
查看
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
引起的有效错误消息吗?
答案 0 :(得分:0)
您可以使用类视图PasswordChangeView。它旨在与PasswordChangeForm一起使用。
您的表单中可能与以下内容有关:
int max = 0;
std::string house;
switch(max){
case gryffindor > max : max = gryffindor;
house = "gryffindor";
case hufflepuff > max : max = gryffindor;
house = "hufflepuff";
case ravenclaw > max : max = gryffindor;
house = "revenclaw";
case slytherin > max : max = gryffindor;
house = "slytherin";
}
也许可以在form.is_valid方法之前手动运行此方法??? 抱歉,不能发表评论。没有足够的分数。