我的页面有以下视图来重置密码:
from django.contrib.auth.forms import PasswordChangeForm
def password_change(request):
if request.method == 'POST':
password_form = PasswordChangeForm(data=request.POST, user=request.user)
if password_form.is_valid():
password_form.save()
update_session_auth_hash(request, password_form.user)
messages.add_message(request, messages.SUCCESS, "Password reset.")
return redirect(reverse('elections:home'))
else:
messages.add_message(request, messages.ERROR, "Error with password reset.")
return redirect('/password/new/')
else:
password_form = PasswordChangeForm(user=request.user)
return render(request, 'registration/password_change.html', {
'form': password_form
})
我的一些用户报告他们无法更改密码,但这对我有用。由于显而易见的原因,我不能问他们他们的密码是什么,我需要向用户提供更多信息性的错误反馈。
据我了解,PasswordChangeForm
会生成我可以访问的错误。这是真的,如果是这样,我如何在视图中访问这些错误以将它们添加到Django消息?如果没有,我如何创建自己的表单来返回这些错误?
答案 0 :(得分:0)
未通过验证的Django表单字段条目引发ValidationError异常,因此您可以执行类似(Django 2.0)的操作:
try:
if password_form.is_valid():
password_form.save() # etc...
except ValidationError as e:
messages.error(request, e)
答案 1 :(得分:-1)
您应该只能在模板中呈现表单错误。如果密码无效,您只需加载填充表单的页面即可。您可以通过删除form.is_valid()之后的else来完成此操作:
password_form = PasswordChangeForm(data=request.POST, user=request.user)
if password_form.is_valid():
...
else: #remove the else block here so that the filled form is rendered when there is an error
如果您手动呈现表单,请确保您已包含正确的错误标记,如下所述:https://docs.djangoproject.com/en/2.0/topics/forms/#rendering-fields-manually