Django之form.Form字段校驗

 

RegexValidator校驗器:django

在自定義的form組件類設置字段validators的值,引入RegexValidator模塊app

from django import forms函數

from django.core.validators import RegexValidatorui

from django.core.exceptions import ValidationErrorspa

 

class Myform(forms.Form):orm

    name = forms.CharField(對象

        # required=True,  # 默認爲Trueget

        min_length=2,it

        max_length=6,io

        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屬性中

相關文章
相關標籤/搜索