Django-源码-Forms组件--自定义规则(钩子)

一:源码解析 is_vaild()

1:自定义forms规则类

class UserForm(forms.Form):
    name=forms.CharField(min_length=5,label="用户名")  #CharField是类,那么name就是对象,所以这个对象对应的就是匹配规则
    pwd=forms.CharField(label="密码")
    email=forms.EmailField(label="邮箱")

    # 自定义钩子(匹配规则)
    # 用户名不能重复
    def clean_name(self):
        val=self.cleaned_data.get('name') 
        ret=UserInfo.objects.filter(name=val)  
        if not ret:
            return val
        else:
            raise ValidationError("用户名已存在")
    # 密码不能是纯数字
    def clean_pwd(self):
        val = self.cleaned_data.get('pwd')  
        print(type(val))
        if val.isdigit():  
            raise ValidationError("密码不能是纯数字")
        else:
            return val

2:调用自定义的forms规则类

实例化
form=UserForm(request.POST)    #request.POST是要匹配规则的数据
      #实例化过程:self.fields={"name":name对象,"pwd":pwd对象,"email":email对象}    这里的对象就是forms类中定义的匹配规则
form.is_valid():#校验数据    

3:is_valid源码分析 

猜你喜欢

转载自www.cnblogs.com/lilz/p/9901815.html
今日推荐