无法导入验证器请检查您的 AUTH_PASSWORD_VALIDATORS 设置

问题描述 投票:0回答:2

我制作了 validators.py 并添加了自定义密码验证器,例如检查大写和特殊字符,之后我在 settings.py 中的身份验证密码验证器中添加了这些验证器,如下所示

AUTH_PASSWORD_VALIDATORS = [
{
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
'OPTIONS': {
'max_similarity': 0.7,
'user_attributes': ("username", "first_name", "last_name", "email")
}
},
{
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
'OPTIONS': {
'min_length': 8,
}
},
{
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
},
\# custom coded validators
{
'NAME': 'app1.validators.UppercaseValidator',
},
{
'NAME': 'app1.validators.SpecialCharValidator',
},
]

这是我的forms.py

`

from django import forms from django.contrib.auth.password_validation import validate_password class SignupForm(forms.Form):
     firstname = forms.CharField(max_length=20)     
     lastname = forms.CharField(max_length=20)     
     email = forms.EmailField()
     username = forms.CharField(max_length=30)
     password = forms.CharField(widget=forms.PasswordInput, validators=[validate_password])`

在注册时我收到此错误

ImproperlyConfigured at /signup/ The module in NAME could not be imported: app1.validators.UppercaseValidator. Check your AUTH_PASSWORD_VALIDATORS setting.

如有任何帮助,我们将不胜感激

在它根据 django 默认情况下的验证器给我错误之前,但在添加我自己的验证器之后,它给了我我提到的错误

python django validation passwords computer-science
2个回答
1
投票

我在运行 django 实例时遇到了同样的问题 它适用于版本 (3, 2, 19, 'final', 0),但它适用于版本 (4, 1, 7, 'final', 0)。 这是我的大写代码:

import re
from django.core.exceptions import ValidationError
from django.utils.translation import ugettext as _

class UppercaseValidator:
    def validate(self, password, user=None):
        if not re.findall('[A-Z]', password):
            raise ValidationError(
                _("The password must contain at least 1 uppercase letter, A-Z."),
            code='password_no_upper',
        )

def get_help_text(self):
    return _(
        "Your password must contain at least 1 uppercase letter, A-Z."
    )

这是我的设置.py:

AUTH_PASSWORD_VALIDATORS = [
   # custom coded validators
   {'NAME': 'users.validators.UppercaseValidator',},
   ... 
]

所以我将验证移到了serializer.py中,在settings.py中注释了代码并且它起作用了。 这是我的 serializer.py 的代码:

import re
from django.core.exceptions import ValidationError
from django.utils.translation import ugettext as _

class CustomRegisterSerializer(RegisterSerializer):

    def validate(self, data):
        user = User(**data)
        password = data.get('password')
        try:
            if not re.findall('[A-Z]', password):
               raise serializers.ValidationError("The password must contain at least 1 uppercase letter, A-Z.")
        except Exception as e:
            raise serializers.ValidationError("The password must contain at least 1 uppercase letter, A-Z.")

希望可以帮到你!


0
投票

改变

从 django.utils.translation 导入 ugettext as _

从 django.utils.translation 导入 gettext as _

ugettext 显然已被弃用并被 gettext 取代。

© www.soinside.com 2019 - 2024. All rights reserved.