django_day07

django_day07

django form组件

  1. form组件的定义

    class RegForm(forms.Form):
        user = forms.CharField(label='用户名')
        pwd = forms.CharField(label='密码')
    
  2. 使用

    def reg2(request):
        form_obj = RegForm()
        if request.method == 'POST':
            #对提交的数据做校验
            form_obj = RegForm(request.POST)
            if form_obj.is_valid():#对数据进行校验
                #校验成功
                return HttpResponse('注册成功')
        return render(request,'reg2.html',{'form_obj':form_obj})
    
  3. 模板

    {{ form_obj.as_p }} 一次性生成所有的input框
    {{ form_obj.user }}  生成该字段的input框
    {{ form_obj.user.label }}    该字段提示的信息
    {{ form_obj.user.id_for_label }}  该字段的input框的id
    {{ form_obj.errors }}   所有字段的错误
    {{ form_obj.user.errors.0 }}  该字段的错误
    
  4. 常用字段

    CharField  文本输入框
    ChoiceField	单选 默认是select
    MultipleChoiceField 多选 默认是select
    
  5. 字段参数

    initial = "张三"    默认值
    choices   用户选择数据
    error_messages={} 自定义错误信息
    widget=forms.PasswordInput  修改input框的类型
    
    required=False,  是否必填
    disabled=False,  是否禁用
    
  6. 校验

    1. 校验器

      def check_name(value):
          #不符合规则
          if 'lsl' in value:
              raise ValidationError("德玛西亚") #捕获错误i
          #符合规则不做任何操作
          
          user = forms.CharField(
              ....
              validators=[check_name],#校验器
      		...
              
                                 )
      
    2. 使用内置的校验器

      from django.core.validators import RegexValidator
      
      phone = forms.CharField(validators=[RegexValidator(r'^1[3-9]d{9}$','手机号格式不正确')])
      
      
    3. 钩子函数

      1. 局部钩子

           #写在类里面
            def clean_user(self):#局部钩子
                #不符合校验规则
                value = self.cleaned_data.get('user')
                if 'lsl' in value:
                    raise ValidationError("德玛西亚")  # 捕获错误i
                #符合校验规则
                return value
        
      2. 全局钩子

           def clean(self):#全局钩子
                #不符合校验规则
        
                pwd = self.cleaned_data.get('pwd')
                re_pwd = self.cleaned_data.get('re_pwd')
                if pwd != re_pwd:
                    #将错误信息加入某个字段里面
                    self.add_error('re_pwd','两次密码不一致')
                    raise ValidationError('两次密码不一致')
                #符合校验规则
        
                return self.cleaned_data
        
原文地址:https://www.cnblogs.com/DemoLi/p/12770161.html