Django - 自定义Form校验规则

自定义Form校验规则

class MyForm(forms.Form):
    # form可以校验的规则
    username = fields.CharField(max_length=32,min_length=3)  
    password = fields.CharField(max_length=32,min_length=3)
    re_password = fields.CharField(max_length=32,min_length=3)   

局部钩子 - 校验用户名不能重复

def clean_username(self):
    # 获取username
    username = self.cleaned_data['username']

    # 判断用户名是否存在
    if models.User.objects.filter(username=username).count():
        # 存在即不符合规则,必须抛出ValidationError异常
        raise ValidationError('该用户名已存在')
    # 校验通过,则返回清洗后的数据
    return self.cleaned_data['username']

全局钩子 - 检验两次密码输入一致

def clean(self):
    # 获取两次输入的密码
    password = self.cleaned_data['password']
    re_password = self.cleaned_data['re_password']
    
    # 判断是否相等,相等则返回数据,否则抛出ValidationError异常
    if password == re_password:
        return self.cleaned_data
    else:
        raise ValidationError('两次密码输入不一致')  # 错误信息放在“__all__”里

注意:全局钩子与局部钩子的函数名、判断异常和返回值都是根据内部源码写的

1. 函数名为“clean_字段名”或者“clean”

2. 数据校验有误,只能抛ValidationError异常,因为在源码中捕获ValidationError异常

3. 数据校验成功,返回数据

posted @ 2019-09-03 18:49  Never&say&die  阅读(337)  评论(0编辑  收藏  举报