我们想在保存用户进入数据库之前做一些字段的校验,先贴出代码;

import re
from django.db import models
from django.db.models.signals import pre_save
from django.dispatch import receiverUNAME_REG = re.compile(r"^\w*")
DATE_REG = re.compile(r"(19\d{2})|(20\d{2})-(0[1-9])|(1[1-2])-(0[1-9])|([12][0~9])|(3[0-1])")class User(models.Model):name = models.CharField(max_length=32)birthday = models.DateField()gender = models.BooleanField(default=True)desc = models.CharField(max_length=256)is_active = models.BooleanField(default=True)logger = logging.getLogger(__name__)@receiver(pre_save, sender=User)
def pre_save_handler(sender, **kwargs):logger.debug("{},{}".format(sender, **kwargs))if not re.match(UNAME_REG, kwargs.uname):     logging.error("username has error!")return if not re.match(UNAME_REG, kwargs.udate):     logging.error("birthday has error!")return

signals.py 文件在 django.db.models.signals,以下是部分源码

 
from django.apps import appsfrom django.dispatch import Signalfrom django.utils import six

class_prepared = Signal(providing_args=["class"])

class ModelSignal(Signal):

# Model初始化之前pre_init = ModelSignal(providing_args=["instance", "args", "kwargs"], use_caching=True)# Model初始化之后post_init = ModelSignal(providing_args=["instance"], use_caching=True)# Model调用save之前,可以做一些验证之类的操作pre_save = ModelSignal(providing_args=["instance", "raw", "using", "update_fields"], use_caching=True)# Model保存之后,可以添加一些任务,关联验证这些post_save = ModelSignal(providing_args=["instance", "raw", "created", "using", "update_fields"], use_caching=True)# Model调用删除之前pre_delete = ModelSignal(providing_args=["instance", "using"], use_caching=True)# Model调用删除之后,可以做删除一些关联数据,关联任务之类的操作post_delete = ModelSignal(providing_args=["instance", "using"], use_caching=True)# 关联数据发生变化时m2m_changed = ModelSignal(providing_args=["action", "instance", "reverse", "model", "pk_set", "using"], use_caching=True)# 改变模型pre_migrate = Signal(providing_args=["app_config", "verbosity", "interactive", "using"])post_migrate = Signal(providing_args=["app_config", "verbosity", "interactive", "using"])# 同步数据,创建数据表pre_syncdb = Signal(providing_args=["app", "create_models", "verbosity", "interactive", "db"])post_syncdb = Signal(providing_args=["class", "app", "created_models", "verbosity", "interactive", "db"])
Django==1.7.7

转载于:https://www.cnblogs.com/huaizhi/p/8603180.html

django 在保存数据前进行数据校验相关推荐

  1. OAF_开发系列03_实现OAF如何在保存前判断数据是否存在变更(案例)

    2014-06-26 Created By BaoXinjian 一.摘要 在OAF的开发中,可能有这样的需求,在选择保存按钮时,如果存在改动的数据,则提交事务,保存到数据库中: 如果不存在改动的数据 ...

  2. SQLServer阻止保存要求重新创建表的更改,sql在一列数据前统一加字符

    SQLServer阻止保存要求重新创建表的更改 导入的Excel表格,需要修改他的表结构,提示SQLServer阻止保存要求重新创建表的更改. SQLServer阻止保存要求重新创建表的更改 1.选择 ...

  3. python后端数据发送到前端_Python Django 前后端数据交互 之 后端向前端发送数据...

    Django 从后台往前台传递数据时有多种方法可以实现. 最简单的后台是这样的: from django.shortcuts import render defmain_page(request): ...

  4. java学习笔记——springmvc 之 数据自定义转换器 数据格式化 JSR303数据校验返回与接收JSON(@RequestBody 和 @ResponseBody)

    九.数据绑定流程分析 1.提出问题 日期字符串格式的表单参数,提交后转换为Date类型 <!--    解决问题: 1.数据类型转换 2.数据格式 3.数据校验 --> BirthDay ...

  5. 前后端数据加解密的几种方式比较

    对称加密 对称加密指的就是加密和解密使用同一个秘钥,所以叫做对称加密.对称加密只有一个秘钥,作为私钥. 具体算法有:DES,3DES,TDEA,Blowfish,RC5,IDEA.常见的有:DES,A ...

  6. FPGA实现串口收发的八字节数据报文Modbus Crc校验

    一.项目工程背景 串口之间的数据交互,是一个在实际工作当中应用非常广泛的场景,所以笔者在这篇博客里为大家详细介绍"串口八字节报文modbus crc收发校验"的工程案例,相信耐心地 ...

  7. varchar保存带格式的数据_软件测试必备之数据库知识(一)

    无论是运维.开发.测试,还是架构师,数据库技术是一个必备加薪神器,那么,一直说学习数据库.学MySQL,到底是要学习它的哪些东西呢? 1.如何快速掌握MySQL? ​培养兴趣 兴趣是最好的老师,不论学 ...

  8. 互联网金融售前心得数据脱敏分析 | PMCAFF微分享

     本期主题 | 互联网金融售前心得&数据脱敏分析 分享嘉宾 | Gina 文字整理 | Mayi-天享 入群请联系管理员37°C微信号:erhuoyimei Gina 本期嘉 ...

  9. 使用zabbix如何自动清理30天前的数据

    zabbix属于一个细度化的监控工具,其入库数据随着细度的增加相应的入库数据量也会较大,当数据量到一定时候的时候其反映速度会比较慢,尽管其监控服务在配置时可以指定数据的保存周期, 但是了解下通过直接操 ...

最新文章

  1. 校园安全责任重大 安防守护迭代升级
  2. WPF 仿QQ登录框翻转效果
  3. Gartner:6个容器和Kubernetes策略的最佳实用技巧
  4. 使用OVF部署虚拟机
  5. AT:AT命令控制上网 PDP
  6. python怎么读excelsheet_python怎么读写excel文件
  7. 【Caffe安装】import caffe时出错:can not find module skimage.io
  8. 服务器数据恢复;IBM V7000数据恢复方法
  9. PLM教程:CAXA 3D 与 PLM 的集成应用
  10. 如何利用github打造博客专属域名
  11. 维乐美学系列:美丽背后的匠心打造
  12. uniapp禁止单页面侧滑返回
  13. .net学习笔记——学生信息管理系统(一、在SQL server中新建学生信息库)
  14. (海康内推码)海康威视2022届春招、2023届超星实习生
  15. js中判断两个对象是否相等。
  16. android 触摸 唤醒屏幕,Android中屏幕保持唤醒
  17. 网络购书挑战书业传统营销模式
  18. 剪视频到底要什么样的电脑配置?
  19. Resin 配置与使用
  20. PTP同步中的TAI和UTC时间

热门文章

  1. 【视频】详解HDFS的HA高可用原理
  2. docker离线包相关脚本编写示例:docker镜像load/push/save脚本
  3. k8s volume卷
  4. Java 8大原子操作
  5. spring cloud组件服务架构
  6. spring boot整合mybatis+通用mapper+pagehelper分页插件
  7. mybatis实现增删改查xml配置和后端Java编程完整教程
  8. matlabpython建模_一直在用Matlab建模,现在Python很火,用学么?
  9. 《MySQL必知必会》所有SQL语句图表集合(可作为查询表使用)---已完结
  10. centos刻录工具_centos u盘引导制作工具下载|