加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

Django - 自定义Form校验规则

发布时间:2020-12-20 10:37:45 所属栏目:Python 来源:网络整理
导读:自定义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) 局

自定义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. 数据校验成功,返回数据

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读