Django - 在ModelForm中添加密码验证

Has*_*war 6 python django django-forms

我在Django中创建了一个ModelForm来注册新用户.它有4个领域(username,email,passwordconfirm_password).我想为密码添加一些验证.例如,如果密码短于8个字符或密码与用户名相似,则会引发错误消息.我怎样才能做到这一点?

这是我的forms.py文件:

from django.contrib.auth.models import User
from django import forms

class user_form(forms.ModelForm):
    password = forms.CharField(widget = forms.PasswordInput)
    confirm_password = forms.CharField(widget = forms.PasswordInput)

    class Meta:
        model = User
        fields = ['username','email', 'password','confirm_password']
Run Code Online (Sandbox Code Playgroud)

password已经包含以下验证器:

AUTH_PASSWORD_VALIDATORS = [
    {
        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimila??rityValidator', 
    },
    {
        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValida??tor',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValid??ator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.NumericPasswordVali??dator',
    }
]
Run Code Online (Sandbox Code Playgroud)

它已经在settings.py中,但我的表单密码未经过验证

ndm*_*iri 7

您需要阅读有关Password Validation的 Django 文档。

总之,你需要更新AUTH_PASSWORD_VALIDATORS你的设置settings.py

Django 带有一些内置的密码验证器:

  1. UserAttributeSimilarityValidator (检查密码和用户的一组属性之间的相似性)
  2. MinimumLengthValidator (检查密码是否满足最小长度)
  3. CommonPasswordValidator (检查密码是否出现在常用密码列表中)
  4. NumericPasswordValidator (检查密码是否不完全是数字)

根据您在问题中陈述的示例验证,您需要使用MinimumLengthValidatorUserAttributeSimilarityValidator

由于您使用的是表单,因此您需要通过在验证表单时调用来手动触发密码验证,如Django 文档中django.contrib.auth.password_validation.validate_password所述。


小智 5

在 forms.py 文件中,您可以使用它来验证设置中定义的所有验证的密码。如果您没有在设置文件中定义任何验证器,则调用您想要验证的特定验证器。

from django.contrib.auth.password_validation import validate_password`
from django.core import validators
from django import forms
class User_profileForm(forms.ModelForm):
password=forms.CharField(widget=forms.PasswordInput,validators=[validate_password])
Run Code Online (Sandbox Code Playgroud)