ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Django之钩子Hook方法

2019-07-21 22:51:32  阅读:257  来源: 互联网

标签:name get 钩子 self Django Hook length cleaned password


局部钩子:

在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 

 

标签:name,get,钩子,self,Django,Hook,length,cleaned,password
来源: https://www.cnblogs.com/open-yang/p/11223175.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有