forms组件的渲染错误信息

 

 

 

from django import forms
from django.forms import widgets
from app01 import models
from django.core.exceptions import ValidationError


#校验模板,对着这个进行校验
class RegForm(forms.Form):
    name = forms.CharField(max_length=8, min_length=3, label='用户名',
                           error_messages={'max_length': '太长了',
                                           'min_length': '太短了',
                                           'required': '该项不能为空'
                                           },
                           widget=widgets.TextInput(attrs={'class': 'form-control'})
                           )
    pwd = forms.CharField(max_length=8, min_length=3, label='密码',
                          error_messages={'max_length': '太长了',
                                          'min_length': '太短了',
                                          'required': '该项不能为空'
                                          },
                          widget=widgets.PasswordInput(attrs={'class': 'form-control'})
                          )
    re_pwd = forms.CharField(max_length=8, min_length=3, label='确认密码',
                          error_messages={'max_length': '太长了',
                                          'min_length': '太短了',
                                          'required': '该项不能为空'
                                          },
                          widget=widgets.PasswordInput(attrs={'class': 'form-control'})
                          )
    email = forms.EmailField(label='邮箱', error_messages={'invalid': '格式不正确',
                                                         'required': '该项不能为空'
                                                         },
                             widget=widgets.EmailInput(attrs={'class': 'form-control'})
                             )
    # clean_字段名字
    def clean_name(self):
        # 从cleaned_data中取出字段的值
        name = self.cleaned_data.get('name')
        # # 校验是否以sb开头
        if name.startswith('sb'):
            raise ValidationError('不能以sb开头')
        else:
            return name
        # user = models.UserInfo.objects.filter(name=name).first()
        # if user:
        #     # 用户已经存在,校验不通过,抛一个异常
        #     raise ValidationError('该用户已经存在')
        #
        # else:
        #     # 校验通过,返回要校验的数据
        #     return name
    # def clean_pwd(self):
    #     pass
    # 全局钩子函数(上面所有校验规则都通过了,包括自定义的)在执行这个
    def clean(self):
        pwd=self.cleaned_data.get('pwd')
        re_pwd=self.cleaned_data.get('re_pwd')
        if pwd==re_pwd:
            # 正确,返回self.cleaned_data
            return None
        else:
            # 校验失败,抛异常
            raise ValidationError('两次密码不一致')

 

-forms组件的渲染错误信息
在模板中: < span > {{foo.errors.0}} < / span >

-forms使用bootstrap样式# 必须先导入模块 from django.forms import widgets
widget = widgets.EmailInput(attrs={'class': 'form-control'})) 
-全局和局部钩子函数: AOP:面向切面编程 - 局部钩子函数(再校验name)


def clean_name(self):
    从cleaned_data中取出字段的值
    name = self.cleaned_data.get('name')
    # 校验是否以sb开头 
    if name.startswith('sb'):
        raise ValidationError('不能以sb开头')
    else: return name - 全局钩子函数


def clean(self):
    pwd = self.cleaned_data.get('pwd')
    re_pwd = self.cleaned_data.get('re_pwd')
    if pwd == re_pwd:  # 正确,返回self.cleaned_data 
        return self.cleaned_data
    else:
        校验失败, 抛异常
        aise
        ValidationError('两次密码不一致')

 

posted @ 2019-01-20 17:48  萤huo虫  阅读(206)  评论(0)    收藏  举报