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='只能由字符数字下划线组成,长度在6到10个字符',  # 提示信息

    # 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

Django之Hook函数的更多相关文章

  1. HOOK函数(一)——进程内HOOK

    什么是HOOK呢?其实很简单,HOOK就是对Windows消息进行拦截检查处理的一个函数.在Windows的消息机制中,当用户产生消息时,应用程序通过调用GetMessage函数取出消息,然后把消息放 ...

  2. Django之视图函数总结

    Django之视图函数总结 HttpRequest与HttpResponse http请求中产生两个核心对象: HttpRequest对象:用户请求相关的所有信息(对象) HttpResponse对象 ...

  3. django views视图函数返回值 return redirect httpresponse总结

    django views视图函数返回值 return redirect  render httpresponse总结

  4. Django自定义模板函数

    Django自定义模板函数 https://www.cnblogs.com/SunsetSunrise/p/7680491.html 在django中新建一个应用:listpage在listpage中 ...

  5. Django 定义视图函数

    Django 定义视图函数 一.接收内容及文件处理 1.接收分类 # 获取数据 request.GET # 提交数据 request.POST # 获取文件 request.FILES 2.check ...

  6. 03 Django之视图函数

    一.Django的视图函数view 一个视图函数(类),简称视图,是一个简单的Python函数(类),它接受WEB请求并返回Web响应. 响应可以是一张网页的HTML内容,一个重定向,一个404错误, ...

  7. [PyTorch 学习笔记] 5.2 Hook 函数与 CAM 算法

    本章代码: https://github.com/zhangxiann/PyTorch_Practice/blob/master/lesson5/hook_fmap_vis.py https://gi ...

  8. 利用Objective-C运行时hook函数的三种方法

    版权声明:转载请注明出处:http://blog.csdn.net/hursing 方法一,hook已有公开头文件的类: 首先写一个Utility函数: #import <objc/runtim ...

  9. Django 使用 locals() 函数

    locals() 函数会以字典类型返回当前位置的全部局部变量. 在 views.py 中添加 from django.shortcuts import render,HttpResponse,rend ...

随机推荐

  1. Java中BigDecimal的equals与compareTo的区别

          有个是否为零的判断[BigDecimal.ZERO.equals(ratio)]我用了BigDecimal的equals方法,结果,判断失败,因此特地分析一下equals与compareT ...

  2. 去掉BigDecimal类型变量小数点后多余的零

           业务背景:mysql中A表中的B字段的类型是decimal类型,小数位数是三位,某一条数据的值是3000000,在Java中查询出来的结果是3000000.000,这样显示在页面中不太好 ...

  3. 第二次作业社团UML图

    第二次作业 UML图 用例图: 时序图: 申请加入社团 学生可以在页面投递社团加入申请,送交给社团管理员审批 社团活动审批 团委通过社团提交胡活动进行审批 评价活动 社团活动举行完,会有相应的团委和学 ...

  4. postgresql数据的入门教程

    postgreSQL数据库简介 PostgreSQL 是一个免费的对象-关系数据库服务器(ORDBMS),在灵活的BSD许可证下发行. PostgreSQL 开发者把它念作 post-gress-Q- ...

  5. Tkinter 之Grid布局

    一.参数说明 参数 作用 column  指定组件插入的列(0 表示第 1 列)默认值是 0 columnspan  指定用多少列(跨列)显示该组件 row  指定组件插入的行(0 表示第 1 行) ...

  6. Jenkins 更新 jenkins.war的方法

    Jenkins 有时候更新,直接是主页提示下载 jenkins.war只需要把下载的jenkins.war 替换原来的jenkins.war 就可以了那么问题来了? 原来的 jenkins.war 到 ...

  7. 深入理解JVM虚拟机3:垃圾回收器详解

    JVM GC基本原理与GC算法 Java的内存分配与回收全部由JVM垃圾回收进程自动完成.与C语言不同,Java开发者不需要自己编写代码实现垃圾回收.这是Java深受大家欢迎的众多特性之一,能够帮助程 ...

  8. IDEA在线和离线安装lombok

    1. IDEA在线安装: 点击安装,电子reset 如果以上方式安装失败,  去以下任意网站下载对应版本插件安装: http://plugins.jetbrains.com/plugin/6317-l ...

  9. idea备忘

    1.idea 最近打开的文件个数 File->Settings->Editor->General->Editor Tabs->Tab Closing Policy-> ...

  10. p2p通信原理及实现

    1.简介 当今互联网到处存在着一些中间件(MIddleBoxes),如NAT和防火墙,导致两个(不在同一内网)中的客户端无法直接通信.这些问题即便是到了IPV6时代也会存在,因为即使不需要NAT,但还 ...