Django之鉤子Hook方法

局部鉤子:django

Fom類中定義 clean_字段名() 方法,就可以實現對特定字段進行校驗。(校驗函數正常必須返回當前字段值)函數

 def clean_name(self):ui

        passspa

        name = self.cleaned_data.get('name')orm

        if name=='admin':對象

            raise ValidationError('admin是超級管理員,不能註冊!')#這個錯誤會直接扔進該字段的錯誤類別中:name.errorsget

        return self.cleaned_data.get('name')it

全局鉤子:

Fom類中定義 clean() 方法,就可以實現對字段進行全局校驗,字段所有驗證完,局部鉤子也所有執行完以後,io

執行這個全局鉤子校驗(校驗函數正常必須返回當前對象的結果值)。鉤子

 # 全局鉤子

    def clean(self):

        register_dict = self.cleaned_data

        print('>>>>>', register_dict)

        if register_dict.get('password') != register_dict.get('r_password'):

            raise ValidationError('密碼不一致!')#因爲是在全局非字段內校驗,這個錯誤會扔給全局對象self中:self.erors

            self.add_error('r_password', '兩次密碼不一致!')#能夠使用對象的add_error('字段''錯誤提示')進行指定

        else:

            return self.cleaned_data

 

 

鉤子實例:

from django import forms

from django.core.exceptions import ValidationError

 

 

class Registerform(forms.Form):

    name = forms.CharField(

        label='用戶名:',

        # required=True,

        max_length=10,

        min_length=6,

        help_text='只能由字符數字下劃線組成,長度在610個字符'# 提示信息

        # initial='只能由字符數字下劃線組成',#默認值

        error_messages={'required': '*必填項',

                        'max_length': '長度不能超過10',

                        'min_length': '至少6個字符', },

 

    )

    password = forms.CharField(

        label='密碼:',

        max_length=12,

        min_length=6,

        error_messages={'required': '*必填項',

                        'max_length': '長度不能超過12',

                        'min_length': '至少6個字符', },

        # widget=forms.widgets.PasswordInput(attrs={'class': 'form-control'},render_value=True),

        widget=forms.PasswordInput(attrs={'class': 'form-control'}, render_value=True),

    )

 

    r_password = forms.CharField(

        label='確認密碼:',

        max_length=12,

        min_length=6,

        error_messages={'required': '*必填項',

                        'max_length': '長度不能超過12',

                        'min_length': '至少6個字符', },

        widget=forms.widgets.PasswordInput(attrs={'type':'password'},render_value=True)#密碼驗證出錯時直接返回會自動清除內容,若是要保留,需設置render_value=True

    )

 

    def __init__(self, *args, **kwargs):

        super(Registerform, self).__init__(*args, **kwargs)

        # print(self.fields)

        for filed in self.fields:

            print('>>>>', filed)

            self.fields[filed].widget.attrs.update({'class': 'form-control'})

 

    # 局部鉤子

    def clean_name(self):

        pass

        name = self.cleaned_data.get('name')

        if name=='admin':

            raise ValidationError('admin是超級管理員,不能註冊!')#這個錯誤會直接扔進該字段的錯誤類別中:name.errors

        return self.cleaned_data.get('name')

 

    def clean_password(self):

        pass

        return self.cleaned_data.get('password')

 

    def clean_r_password(self):

        pass

        return self.cleaned_data.get('r_password')

 

    # 全局鉤子

    def clean(self):

        register_dict = self.cleaned_data

        print('>>>>>', register_dict)

        if register_dict.get('password') != register_dict.get('r_password'):

            raise ValidationError('密碼不一致!')#因爲是在全局非字段內校驗,這個錯誤會扔給全局對象self中:self.erors

            self.add_error('r_password', '兩次密碼不一致!')#能夠使用對象的add_error('字段''錯誤提示')進行指定

        else:

            return self.cleaned_data

相關文章
相關標籤/搜索