在Django版本中指定最小密码长度< = 1.8?

时间:2016-07-15 14:33:46

标签: django django-authentication

如果您使用的是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。

1 个答案:

答案 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'),
    ...
]