zoukankan      html  css  js  c++  java
  • 17.Django表单验证

    Django提供了3中方式来验证表单

    官网文档:https://docs.djangoproject.com/en/1.9/ref/validators

    1.表单字段验证器
      a.引入:from django.core.exceptions import ValidationError
      b.定义验证方法,验证不通过抛一个ValidationError异常

        def validate_name(value):
          验证不通过
            raise ValidationError("%s的信息已经存在"%value)
          验证通过
            pass

      c.在Form中定义字段时候,通过validators指定验证器
        name = forms.CharField(label="名称", validators=[validate_name])
    例子:

    from django import forms
    from hello.models import Publisher
    from django.core.exceptions import ValidationError

    def validate_name(value):
    if value == "xiaol":
    raise ValidationError("%s的信息已经存在" % value)
    else:
    pass


    class PublisherForm(forms.ModelForm):
    name = forms.CharField(label="名称", validators=[validate_name])
    class Meta:
    model = Publisher
    exclude = ("id",)

    2.clean_filedName,针对某个字段进行验证
      a.在ModelForm中定义clean_filedName实例方法

      b.这里如果验证不通过抛异常

      c.如果验证通过需要把值在return出去,否则表单就获取不到这个值了
        def clean_name(self):
          value = self.cleaned_data.get('name')
          验证不通过
            raise ValidationError("%s的信息已经存在"%value)
          验证通过
            return value

    例子:

    from django import forms
    from hello.models import Publisher
    from django.core.exceptions import ValidationError

    class PublisherForm(forms.ModelForm):
    def clean_name(self):
    value = self.cleaned_data.get('name')
    if value == "xiaol":
    raise ValidationError("%s的信息已经存在" % value)
    else:
    return value
    class Meta:
    model = Publisher
    exclude = ("id",)


    3.表单clean方法,针对整个表单验证(比如确认密码这样的需求)
      a.在ModelForm中定义clean实例方法,
      b.这里是对整个表单进行验证,所以取值的时候就不能像clean_filedName那样取
      c.需要先调用父类的clean方法,把表单的值保存到本地变量中,在从本地变量中取想要的值
      d.和clean_filedName一样,这里验证通过也需要返回,但是这里返回的不是一个值,而是通过父类方法获取到的那个本地变量
      e.和clean_filedName不同,这里验证不通过不是抛异常,而是通过 self._errors['字段名']=self.error_class(["提示信息"])的方式返回
        def clean(self):
          cleaned_data = super(XXXModelForm,self).clean()
          value = cleaned_data.get('name')
          验证不通过
            self._errors['name']=self.error_class(["%s的信息已经存在" % value])
          验证通过
            return cleaned_data

    例子:

    from django import forms
    from hello.models import Publisher

    class PublisherForm(forms.ModelForm):
    def clean(self):
    cleaned_data = super(PublisherForm, self).clean()
    value = cleaned_data.get('name')
    if value == "xiaol":
    self._errors['name'] = self.error_class(["%s的信息已经存在" % value])
    else:
    return cleaned_data
    class Meta:
    model = Publisher
    exclude = ("id",)

    备注:如果clean_fieldName和clean都定义了,那么两个都会执行,顺序是:clean_fieldName->clean

  • 相关阅读:
    配置文件管理
    Nacos学习
    dockerCompose学习
    Dockerfile
    vue生命周期
    github使用
    推荐系统
    js笔记17
    js笔记16
    js笔记15
  • 原文地址:https://www.cnblogs.com/413xiaol/p/6512543.html
Copyright © 2011-2022 走看看