zoukankan      html  css  js  c++  java
  • clean()方法的简单应用

    clean()方法主要用于验证相互依赖的字段,例如注册时,填写的“密码”和“确认密码”要相等时才符合要求。

    在调用表单clean() 方法的时候,所有字段的验证方法已经执行完(表单字段的默认验证(如CharField())和特定字段属性的验证(clean_<fieldname>)),所以self.cleaned_data 填充的是目前为止已经合法的数据。所以你需要记住这个事实,你需要验证的字段可能没有通过初试的字段检查。(例如你要验证“密码”和“确认密码”是否相等,但或许它们没有通过初始字段检查,例如格式错误等,但仍会执行这一步)

    在这一步,有两种方法报告错误。你可以在clean() 方法中抛出ValidationError 来创建错误。例如:

     forms.py
    1
    from django import forms 2 class RegisterForms(BaseForm, forms.Form): 3 password = forms.CharField() 4 confirm_password = forms.CharField() 5 6 def clean(self): 7 cleaned_data = super(RegisterForms, self).clean() # 注意,super(RegisterForms, self).clean() 的调用时为了保证维持父类中的验证逻辑。 8   v1 = cleaned_data.get('password') 9   v2 = cleaned_data.get('confirm_password') 10   if v1 == v2: 11   pass 12 else: 13   raise ValidationError(message='密码输入不一致', code='invalid') #错误信息保存在errors.__all__中
     1 view.py
     2 def register(request):
     3     if request.method == 'GET':
     4         return render(request, 'register.html')
     5 
     6     elif request.method == 'POST':
     7         obj = RegisterForms(request=request, data=request.POST)
     8         if obj.is_valid():
     9            pass
    10         else:
    11             error = obj.errors
    12             return render(request, 'register.html', {'errors': error, 'obj':obj}) #因为要在HTML中把errors.__all__显示出来,所以要把实例化的obj传过去
     register.html
    1
    <form method='post' action='/register.html'> 2 <div class="form-group"> 3 <label for="password">密码</label> 4 <input type="password" class="form-control" id="password" name="password" placeholder="请输入密码"> 5 <p> 6 {{ errors.password.0 }} 7 {{ obj.non_field_errors.0 }} #显示共有的错误信息 8 </p> 9 </div> 10 11 </form>

    第二种方法涉及将错误消息关联到某个字段。在这种情况下,让我们在表单的显示中关联一个错误信息到“password” 。例如

     1 from django import forms
     2 
     3 class RegisterForms(BaseForm, forms.Form):
     4     password = forms.CharField()
     5     confirm_password = forms.CharField()
     6     
     7     def clean(self):
     8         cleaned_data = super(RegisterForms, self).clean()
     9         v1 = cleaned_data.get('password')
    10         v2 = cleaned_data.get('confirm_password')
    11         if v1 == v2:
    12             pass
    13         else:
    14             msg = '密码输入不一致'
    15             self.add_error('password', msg)

    此时错误信息是关联到password上的,因为不用传递实例化的obj,在register.html上也只需写上"{{ errors.password.0 }}"

  • 相关阅读:
    PHP 反射 ReflectionClass
    go-字符串生成数据库字段
    grpc类型
    ubuntu安装zookeeper集群
    ubuntu安装JDK
    zookeeper分布式读写锁
    golang利用gob序列化struct对象保存到本地(转载)
    golang手动管理内存(转载)
    类json格式字符串打印
    研二寒假---关于Qt&CV曲线算法问题
  • 原文地址:https://www.cnblogs.com/linyuhong/p/9493664.html
Copyright © 2011-2022 走看看