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. Scrapy不同的item指定不同的Pipeline

    scrapy不同的item指定不同的Pipeline from items import AspiderItem, BspiderItem, CspiderItem class myspiderPip ...

  2. avalon.js中使用owl-carousel轮播图

      <?php if($banners){?> <div class="ms-controller" ms-controller="bannerShow ...

  3. vue tab嵌入iframe切换不刷新,相对完整的方案

    说到Vue的简单.便捷.高效,谁用谁喜欢,自然企业应用也来玩一把,三大经典组件:树控件,网格控件,选项卡控件: 本章先说选项卡tab控件的嵌入iframe. 本次主要解决以下问题: 1.tab控件混合 ...

  4. Java主流锁

    Java主流锁相关知识点概图,为方便预览,将思维导图上传至印象笔记,博客园直接上传图片受限于图片大小. 印象笔记url:https://app.yinxiang.com/shard/s24/nl/27 ...

  5. [Ubuntu] 移植Ubuntu16.04根文件系统到嵌入式平台

    CPU:RK3288 1.通过 ubuntu cdimage 下载 ubuntu16.04 内核,以下两种方式都可以 在 windows 系统网页中下载 http://cdimage.ubuntu.c ...

  6. firewall-cmd命令详解

    https://blog.csdn.net/GMingZhou/article/details/78090963 实例 # 安装firewalld yum install firewalld fire ...

  7. macbook配置homebrew

    打开homebrew官网,https://brew.sh/将安装脚本复制到命令行中,执行即可 命令正在运行,下载应用,如果在安装应用时,下载速度很慢,可以参考https://blog.csdn.net ...

  8. 通过adb操作安卓亮屏、设置背光亮度、解锁、打开app

    亮屏 adb shell inputkeyevent 26 keyevent 26表示点击power Android adb 点亮和关闭屏幕的命令 # kernel休眠 echo mem > / ...

  9. 微信小程序之分享功能

    说到分享 大家都会想到手机右上角点击不就分享了么?对的没错,那样是分享转发的是小程序  而不是指定的某个页面,所以自己动手丰衣足食,自己写一个转发功能被, 其实也没那么可怕,主要参考的是微信小程序AP ...

  10. AT1357 n^p mod m(洛谷)

    题意翻译 求 n^p mod m 的值 输入格式 一行,为整数 n,m,p(注意顺序) 输出格式 一行,为 n^p mod m 的值 数据说明 对于100%的数据 1≤n,m≤10^91≤n,m≤10 ...