How to use custom password validators beside the django auth password validators?(如何在 django auth 密码验证器旁边使用自定义密码验证器?)
问题描述
正如上面提到的问题,我将尝试在注册过程中使用某个额外的规则来验证密码.额外的规则应该是验证密码是否至少包含一个数字、一个字母和一个特殊字符.
As the question above mentioned, I will trying to use a certain extra rule to validate a password during the registration process. The extra rule should be that a password is validate if it has at least one digit, one letter and one special character.
我解决这个问题的方法我创建了一个名为validators.py 的文件.
My approach to solute this problem I've created a file named validators.py.
from django.core.exceptions import ValidationError
class CustomPasswortValidator:
    def validate(value):
      # check for digit
      if not any(char.isdigit() for char in value):
          raise ValidationError(_('Password must contain at least 1 digit.'))
      # check for letter
      if not any(char.isalpha() for char in value):
          raise ValidationError(_('Password must contain at least 1 letter.'))
      # check for special character
      special_characters = "[~!@#$%^&*()_+{}":;'[]]"
      if not any(char in special_characters for char in value):
        raise ValidationError(_('Password must contain at least 1 letter.'))
我的自定义注册表如下所示:
My custom registration form looks like this:
from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User
class RegistrationForm(UserCreationForm):
    first_name = forms.CharField(max_length=30, required=False,                                         
                                 help_text='Optional.')
    last_name = forms.CharField(max_length=30, required=False, 
                                 help_text='Optional.')
    email = forms.EmailField(max_length=254, help_text='Required. Inform a valid email address.')
    class Meta:
        model = User
        fields = ('username', 'first_name', 'last_name', 'email', 'password1', 'password2', )
我不明白我是如何告诉 django,我的自定义密码验证器应该在 django AUTH_PASSWORD_VALIDATORS 旁边使用.
I don't get it how I tell django, that my custom password validator should be use beside the django AUTH_PASSWORD_VALIDATORS.
推荐答案
所以,正如 e4c5 提到的,它真的很简单明了.
So, as e4c5 mentioned, it is really simple and straightforward.
我的 CustomPasswordValidator 看起来像这样:
My CustomPasswordValidator looks like this:
from django.core.exceptions import ValidationError
from django.utils.translation import ugettext as _
class CustomPasswordValidator():
    def __init__(self, min_length=1):
        self.min_length = min_length
    def validate(self, password, user=None):
        special_characters = "[~!@#$%^&*()_+{}":;'[]]"
        if not any(char.isdigit() for char in password):
            raise ValidationError(_('Password must contain at least %(min_length)d digit.') % {'min_length': self.min_length})
        if not any(char.isalpha() for char in password):
            raise ValidationError(_('Password must contain at least %(min_length)d letter.') % {'min_length': self.min_length})
        if not any(char in special_characters for char in password):
            raise ValidationError(_('Password must contain at least %(min_length)d special character.') % {'min_length': self.min_length})
    def get_help_text(self):
        return ""
只需将其添加到 settings.py 中的 AUTH_PASSWORD_VALIDATORS 列表即可!
Just add it to the list of AUTH_PASSWORD_VALIDATORS in settings.py and that's it!
AUTH_PASSWORD_VALIDATORS = [
{
    'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
},
{
    'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
},
{
    'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
},
{
    'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
},
{   'NAME': 'registration.validators.CustomPasswordValidator',
},]
这篇关于如何在 django auth 密码验证器旁边使用自定义密码验证器?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何在 django auth 密码验证器旁边使用自定义密码验证器?
 
				
         
 
            
        基础教程推荐
- PermissionError: pip 从 8.1.1 升级到 8.1.2 2022-01-01
- 包装空间模型 2022-01-01
- 在同一图形上绘制Bokeh的烛台和音量条 2022-01-01
- 在Python中从Azure BLOB存储中读取文件 2022-01-01
- 修改列表中的数据帧不起作用 2022-01-01
- 使用大型矩阵时禁止 Pycharm 输出中的自动换行符 2022-01-01
- Plotly:如何设置绘图图形的样式,使其不显示缺失日期的间隙? 2022-01-01
- PANDA VALUE_COUNTS包含GROUP BY之前的所有值 2022-01-01
- 求两个直方图的卷积 2022-01-01
- 无法导入 Pytorch [WinError 126] 找不到指定的模块 2022-01-01
 
    	 
    	 
    	 
    	 
    	 
    	 
    	 
    	 
				 
				 
				 
				