Django之form.Form字段校验

 

RegexValidator校验器:

在自定义的form组件类设置字段validators的值,引入RegexValidator模块

from django import forms

from django.core.validators import RegexValidator

from django.core.exceptions import ValidationError

 

class Myform(forms.Form):

    name = forms.CharField(

        # required=True,  # 默认为True

        min_length=2,

        max_length=6,

        initial='abc'# 默认值

        help_text='长度为26个字符!'# 帮助信息

        error_messages=[{  # 自定义错误提示信息(默认为英文)

            'required': '不能为空!',

            'min_length': '不能少于2个字符!'

        }],

        validators=[RegexValidator(r'^(\w)+$','用户名只能有字母数字下划线组成!'),], 

        # disabled=True#默认为True显示

 

    )

    

email = fields.EmailField(required=False,

                           error_messages={'required': u'邮箱不能为空','invalid': u'邮箱格式错误'},

                           widget=widgets.TextInput(attrs={'class': "form-control", 'placeholder': u'邮箱'}))

 

自定义函数校验:

from django.shortcuts import render,HttpResponse

from django import forms

from app01 import models

from django.core.validators import RegexValidator

import re

from django.core.exceptions import ValidationError

 

#自定义校验函数,直接在字段validators中使用

def name_valid(value):

    name_re=re.compile(r'^[a-zA-Z_]+$')

    if not name_re.match(value):

        raise ValidationError("只能以字母下划线开头!")

class Myform(forms.Form):

    name = forms.CharField(

        # required=True,  # 默认为True

        min_length=2,

        max_length=6,

        initial='abc'# 默认值

        help_text='长度为26个字符!'# 帮助信息

        error_messages=[{  # 自定义错误提示信息(默认为英文)

            'required': '不能为空!',

            'min_length': '不能少于2个字符!'

        }],

        validators=[RegexValidator(r'^(\w)+$','用户名只能有字母数字下划线组成!'), name_valid], 

# 自定义校验规则(列表中放自定义函数名,或者引入django内置的RegexValidator校验器,可以混合使用)

    )

 

校验顺序:

自定义类实例化返回值对象的is_valid()方法调用:

1)字段规则校验

2validators校验(RegexValidator校验器或自定义校验函数)

3)局部钩子(类中定义的以clean_字段名命名的函数,校验正常必须返回该字段的值self.cleaned_data.get('name')

4)全局钩子(类中定义的函数名clean,校验正常必须返回该对象的校验结果值return self.cleaned_data

5)每一步通过校验单结果都以字典形式保存在类对象的cleaned_data属性中

posted @ 2019-07-21 22:37  笑得好美  阅读(969)  评论(0编辑  收藏  举报