在 Django 版本 <= 1.8 中指定最小密码长度?
Specify Minimum Password Length in Django Version <= 1.8?
如果您使用的是 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。
您可以自定义默认的 PasswordChangeForm
表单并传递 password_change_form 额外选项以通过 url 查看函数指向您的 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
并更改 url:
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'),
...
]
如果您使用的是 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。
您可以自定义默认的 PasswordChangeForm
表单并传递 password_change_form 额外选项以通过 url 查看函数指向您的 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
并更改 url:
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'),
...
]