Django - 自定义Form校验规则

Posted bladecheng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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. 数据校验成功,返回数据

以上是关于Django - 自定义Form校验规则的主要内容,如果未能解决你的问题,请参考以下文章

el-form自定义校验

小5聊Vue基础开发之el-form表单自定义规则校验value为underfind的情况

el-form的各种校验姿态

React 自定义表单校验规则

element-ui自定义表单校验规则及常用表单校验

element-ui自定义表单校验规则及常用表单校验