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. python生成二维码(简易)

    首先要的配置: pillow image qrcode zxing 然后直接上代码: import PIL import qrcode # 实例化二维码生成类 qr = qrcode.QRCode( ...

  2. 第二次作业社团UML图

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

  3. [SDOI2019]快速查询——模拟

    题目链接: [SDOI2019]快速查询 对于整个序列维护一个标记$(k,b)$表示序列的每个数的真实值为$k*a_{i}+b$(注意要实时维护$k$的逆元),并记录序列的和. 对于单点修改,将$a_ ...

  4. C++的面向对象的Dijkstra写法

    C++的面向对象的Dijkstra写法 面向对象特点的充分使用 清晰的逻辑 简洁的图输入 程序 面向对象特点的充分使用 清晰明确的类实现 class Edge(边的实现) class Req (路由请 ...

  5. [转]js创建1-100的数组

    //实现方法一:循环赋值var arr1 = new Array(100);for(var i=0;i<arr1.length;i++){ arr1[i] = i;}console.log(ar ...

  6. Chrome和火狐插件让数以百万计用户隐私数据泄露

      https://tech.163.com/19/0721/12/EKK1PRAU00097U7R.html   网易科技讯7月21日消息,据国外媒体报道,流行浏览器诸如广告拦截等扩展功能,已经遭利 ...

  7. python 设计模式之状态模式

    1.为什么会出现状态模式? 在软件开发过程中,各种应用程序可能会根据不同的情况做出不同的处理.最直接的方案就是把所有的可能发生的情况都考虑到.然后使用条件语句(if...elseif...elseif ...

  8. angular中子组件通过@Output 触发父组件的方 法

    1. 子组件引入 Output 和 EventEmitter import { Component, OnInit ,Input,Output,EventEmitter} from '@angular ...

  9. 阶段5 3.微服务项目【学成在线】_day09 课程预览 Eureka Feign_10-课程详情页面静态化-课程详情模型数据查询接口

    根据课程详情页面写一个获取数据模型的接口 目录的数据来自于课程计划表 右侧是课程的图片 需要写一个接口 获取课程相关的所有信息. 所以就需要一个模型类,里面包含了基本信息.图片信息.等各种详情页面的信 ...

  10. 遍历List集合删除元素的出现报错

    遍历List集合删除元素的出现报错   遍历List集合删除元素的时候会发生索引越界异常或内容遍历不全等问题. 例子: List<String> al = new ArrayList< ...