Python 自定义验证程序破坏密码更改表单

Python 自定义验证程序破坏密码更改表单,python,django,django-forms,Python,Django,Django Forms,我们正在尝试向Django 1.11.18中的密码重置页面添加自定义验证器。下面是我们实现的简化版本。然而,在呈现密码重置页面的表单中似乎有一个不寻常的副作用。我需要3个字段,old\u password、new\u password1和new\u password2,但页面上没有呈现new\u password1。我们正在使用几乎所有默认的Django密码更改功能,如下面的views.py所示。如果从设置中删除了验证程序,则表单将按预期工作 为什么验证器会破坏表单 myvalidator.py

我们正在尝试向Django 1.11.18中的密码重置页面添加自定义验证器。下面是我们实现的简化版本。然而,在呈现密码重置页面的表单中似乎有一个不寻常的副作用。我需要3个字段,
old\u password
new\u password1
new\u password2
,但页面上没有呈现
new\u password1
。我们正在使用几乎所有默认的Django密码更改功能,如下面的views.py所示。如果从设置中删除了验证程序,则表单将按预期工作

为什么验证器会破坏表单

myvalidator.py

重新导入
从django.conf导入设置
从django.core.exceptions导入ValidationError
从django.utils.translation导入ugettext\u lazy作为_
类MyValidator(对象):
消息=((“密码不够复杂(%s)”)
code=“复杂性”
def uuu init uuu(self,complexities=None):
自我复杂性=复杂性
def验证(自我、密码、用户=无):
错误=[]
如果密码==“12345678”:
错误。追加(u(“密码必须是12345678”))
如果出现错误:
raise ValidationError(self.message%(u'必须包含'+u','.join(错误),),
代码=self.code)
def获取帮助文本(自我):
返回_(
“您的密码必须包含12345678”
)
视图.py

类密码更改视图(视图.密码更改视图):
模板名称='accounts/password\u change.html'
设置.py

AUTH\u PASSWORD\u验证器=[
{
'NAME':'django.contrib.auth.password\u validation.UserAttributesMilarityValidator',
},
{
'NAME':'django.contrib.auth.password\u validation.MinimumLengthValidator',
“选项”:{
“最小长度”:8,
}
},
{
'NAME':'django.contrib.auth.password\u validation.CommonPasswordValidator',
},
{
'NAME':'django.contrib.auth.password\u validation.NumericPasswordValidator',
},
{
'NAME':'the.path.to.myvalidator.myvalidator',
},
]
密码更改.html


{%csrf_令牌%}
{{form.old_password.label}
{{form.old_password}}{{form.old_password.errors}
{{form.new_password1.label}
{{form.new_password1}}{{form.new_password1.errors}
{{form.new_password2.label}
{{form.new_password2}}{{form.new_password2.errors}
更改我的密码

我们意识到这是
get\u help\u text
函数的缩进错误。由于某些原因,在Django中无法正确处理错误。很难追踪。

共享模板。您发布的任何其他内容都不会影响字段的呈现。@4140tm我添加了它,但正如我所说的,如果我从
settings.py中删除自定义验证器,模板工作正常。抱歉,忽略了这一点。我测试了您共享的内容,无法重现所描述的问题。不过,我遇到了另一个问题,
ValidationError
中的字符串插值抛出了另一个问题exception@4140tm感谢您的努力,我们找到了解决方案。