Django内置用户表密码验证

这个博客介绍了如何在 Django 中创建一个用户注册表单,该表单要求密码至少为十位,并且必须包含数字、大写字母、小写字母和一个特殊字符。在 `forms.py` 中定义了 `UserModelForm` 类,它重写了 `clean_password` 方法以进行复杂度验证。如果密码不满足条件,将抛出验证错误。在 `admin.py` 中,`UserAdmin` 类使用了这个表单,确保在后台管理中保存用户时也遵循同样的密码规则。

验证密码的位数并包含数字、字母和符号。

models.py
from django.contrib.auth.models import AbstractUser


class User(AbstractUser):
    '''继承内置用户表'''
    ...
forms.py
import re

from django import forms
from django.contrib.auth import get_user_model

User = get_user_model()


class UserModelForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(UserModelForm, self).__init__(*args, **kwargs)
        self.fields['password'].help_text = '密码十位以上必须包含数字、大写字母、小写字母、符号(非数字字母)'
    
    def clean_password(self):
        '''验证表单提交的密码字段'''
        pw = self.cleaned_data['password']
        r = r'(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[_\W]).{10,}'
        result = re.match(r, pw)
        if not result:
            # 不满足条件
            raise forms.ValidationError('密码不符合')
        return pw

    class Meta:
        model = User
        fields = '__all__'
        # exclude = ()

admin.py
from django.contrib import admin
from django.contrib.auth import get_user_model

from users.forms import UserModelForm

User = get_user_model()


class UserAdmin(admin.ModelAdmin):
    form = UserModelForm

    def save_model(self, request, obj, form, change):
        if obj.pk:
            # 修改
            orig_obj = User.objects.get(pk=obj.pk)
            if obj.password != orig_obj.password:
                # 密码改变
                obj.set_password(obj.password)
        else:
            # 新建
            obj.set_password(obj.password)
        obj.save()

    def get_queryset(self, request):
        return User.objects.all()

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值