zoukankan      html  css  js  c++  java
  • Django之钩子Hook方法

    局部钩子:

    Fom类中定义 clean_字段名() 方法,就能够实现对特定字段进行校验。(校验函数正常必须返回当前字段值)

     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')

    全局钩子:

    Fom类中定义 clean() 方法,就能够实现对字段进行全局校验,字段全部验证完,局部钩子也全部执行完之后,

    执行这个全局钩子校验(校验函数正常必须返回当前对象的结果值)。

     # 全局钩子

        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 

     

  • 相关阅读:
    开发落网电台windows phone 8应用的计划(3)
    开发落网电台windows phone 8应用的计划(2)
    开发落网电台windows phone 8应用的计划(1)
    codeforces 111B Petya and Divisors
    Mac远程连接windows报错“证书或相关链无效,是否仍要连接到此计算机”的处理办法。
    Navicat连接报错:cannot load OCI DLL,126
    navicat 连接oracle数据库报错:ORA-28547:connection to server failed,probable Oracle Net admin error
    无法启动此程序因为计算机中丢失msvcr71
    CSS实现矩形按钮右边缘的中间有个往里凹的小半圆
    如何运行jar文件
  • 原文地址:https://www.cnblogs.com/open-yang/p/11223175.html
Copyright © 2011-2022 走看看