如果您使用的是Django 1.8,或者当用户更改密码时,是否可以强制执行最小密码长度?当用户在我的网站中创建他们的帐户时,我会在注册表单中使用自定义验证程序强制执行最小密码长度。但是,当用户想要更改密码时,我会调用Django的auth_views.password_change方法,该方法指定使用的表单和验证标准。
# account/urls.py
from django.conf.urls import url
from django.contrib.auth import views as auth_views
urlpatterns = [
...
url(r'^password_change/$',
auth_views.password_change,
{'template_name': 'password_change_form.html'},
name='password_change'),
...
]
由于我没有验证他们的新密码,因此用户可以将其更改为不符合我的最小长度标准的密码。除了猴子修补之外,有没有办法进行此验证?此Stackover question讨论了一种有效的方法,但它适用于您实施身份验证的情况,而我只允许经过身份验证的用户更改其现有密码。我知道Django 1.9将通过AUTH_PASSWORD_VALIDATORS设置提供此功能,但在我的网站上线之前我没有时间升级到1.9。
答案 0 :(得分:1)
您可以自定义默认的PasswordChangeForm
表单,并传递 password_change_form 附加选项,通过网址查看功能,指向您的CustomPasswordChangeForm表单,而不是默认表单。
from django.contrib.auth.forms import PasswordChangeForm
class CustomPasswordChangeForm(PasswordChangeForm):
"""
A Custom PasswordChangeForm for minimum password length validation.
"""
def clean_new_password1(self):
"""
Validates that the new_password1.
"""
password = self.cleaned_data.get('new_password1')
# Add your custom validation
if len(password) < 8:
raise ValidationError('Password too short')
return password
并更改网址:
from django.conf.urls import url
from django.contrib.auth import views as auth_views
from _where_ import CustomPasswordChangeForm #import the CustomPasswordChangeFormform
urlpatterns = [
...
url(r'^password_change/$',
auth_views.password_change,
{'template_name': 'password_change_form.html', 'password_change_form': CustomPasswordChangeForm},
name='password_change'),
...
]