django实现类似触发器的功能


Posted in Python onNovember 15, 2019

这篇博客给大家讲解在django中类似触发器的效果

这篇教程分别会讲解

插入记录后,删除记录前,删除记录后这三个部分

相关环境 python 3.6 django2.0

我们一起来看看需求

有一个博客模型 ,有一个 博客计数模型

现在的需求是每要创建一个博客,就把博客计数模型中的计数字段初始化为0,我们不禁想到了触发器

在创建完blog记录后,我们就对应着在博客计数表上进行相关操作。

一起来看看博客计数模型

django实现类似触发器的功能

再来看看博客模型

django实现类似触发器的功能

可以看到,在产生模型实例(即数据库表产生新纪录)的时候,重写父类模型中的save方法,在save方法中建议先调用一次save方法,将记录写在数据表中,再去自定义实现自己拓展的功能

好了 插入记录的触发器效果我们完成了,再来看看删除记录的触发器效果该如何实现

我们现在仍然有一个需求,为了保持数据库的一致性,我们希望在删除博客之前,先将该博客下的评论都删除,再将该博客删除

看看我们的评论模型

django实现类似触发器的功能

这个时候就不能像save()方法那样,解决方案是在models.py中进行相关操作,在删除之前发送一个信号,将该博客记录传给该方法

这里的形参instance即为接受的博客模型实例

from django.db.models.signals import post_save, post_delete,pre_delete
from django.dispatch import receiver
 
@receiver(pre_delete, sender=Blog)
def before_delete_blog(sender, instance, **kwargs):
 print( instance.title + " has been deleted ")#测试代码
 
class ReadNum(models.Model):
 count = models.IntegerField(default = 0)
 blog = models.OneToOneField(Blog,on_delete = models.CASCADE)
 def __str__(self):
  return self.blog.title
 class Meta:
  #ordering = ['-created_time']
  verbose_name = '博客计数'
  verbose_name_plural = '博客计数'

我们对应着进行一下测试:

django实现类似触发器的功能

可见我们已经达成了目的,当然,这里的仅仅是一个测试的代码,大家可以根据业务需且能自定义相关操作。

总结:

好,到这里就给大家介绍了django下,实现类似触发器的效果,触发insert操作,重写模型下的save方法

触发delete方法 用到django信号机制 django删除该记录前后会发送信号,捕捉这一信号,可以定制自己的操作,实现类似触发器的效果,感谢大家

以上这篇django实现类似触发器的功能就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python利用装饰器进行运算的实例分析
Aug 04 Python
用Python的Flask框架结合MySQL写一个内存监控程序
Nov 07 Python
Django 添加静态文件的两种实现方法(必看篇)
Jul 14 Python
浅谈Python处理PDF的方法
Nov 10 Python
Python方法的延迟加载的示例代码
Dec 18 Python
微信跳一跳自动运行python脚本
Jan 08 Python
Python实现输入二叉树的先序和中序遍历,再输出后序遍历操作示例
Jul 27 Python
PyQt5实现类似别踩白块游戏
Jan 24 Python
python-sys.stdout作为默认函数参数的实现
Feb 21 Python
jupyter 实现notebook中显示完整的行和列
Apr 09 Python
利用Python实现字幕挂载(把字幕文件与视频合并)思路详解
Oct 21 Python
一起来学习Python的元组和列表
Mar 13 Python
Python socket实现的文件下载器功能示例
Nov 15 #Python
Django通过dwebsocket实现websocket的例子
Nov 15 #Python
Python numpy线性代数用法实例解析
Nov 15 #Python
Django中提示消息messages的设置方式
Nov 15 #Python
调用其他python脚本文件里面的类和方法过程解析
Nov 15 #Python
Django实现简单网页弹出警告代码
Nov 15 #Python
使用Python函数进行模块化的实现
Nov 15 #Python
You might like
页面乱码问题的根源及其分析
2013/08/09 PHP
php实现下载限制速度示例分享
2014/02/13 PHP
php防止站外远程提交表单的方法
2014/10/20 PHP
PHP插件PHPMailer发送邮件功能
2017/02/28 PHP
Domino中运用jQuery读取视图内容的方法
2009/10/21 Javascript
js下获取div中的数据的原理分析
2010/04/07 Javascript
jQuery Tools tooltip使用说明
2012/07/14 Javascript
jquery实现弹出窗口效果的实例代码
2013/11/28 Javascript
Egret引擎开发指南之运行项目
2014/09/03 Javascript
jquery-tips悬浮提示插件分享
2015/07/31 Javascript
JS模拟按钮点击功能的方法
2015/12/22 Javascript
javascript中去除数组重复元素的实现方法【实例】
2016/04/12 Javascript
jquery拖动层效果插件用法实例分析(附demo源码)
2016/04/28 Javascript
判断数组的最佳方法(推荐)
2016/10/11 Javascript
jquery 手势密码插件
2017/03/17 Javascript
20行JS代码实现粘贴板复制功能
2018/02/06 Javascript
vue 设置proxyTable参数进行代理跨域
2018/04/09 Javascript
nodejs中实现用户注册路由功能
2019/05/20 NodeJs
微信小程序+云开发实现欢迎登录注册
2019/05/24 Javascript
Vue 实现从小到大的横向滑动效果详解
2019/10/16 Javascript
微信小程序实现比较功能的方法汇总(五种方法)
2020/03/07 Javascript
浅谈编码,解码,乱码的问题
2016/12/30 Python
Python求出0~100以内的所有素数
2018/01/23 Python
python生成多个只含0,1元素的随机数组或列表的实例
2018/11/12 Python
Python函数中的可变长参数详解
2019/09/12 Python
Python统计时间内的并发数代码实例
2019/12/28 Python
Ajxa常见问题都有哪些
2014/03/26 面试题
学校对教师的评语
2014/04/28 职场文书
节能减耗标语
2014/06/21 职场文书
最美护士演讲稿
2014/08/27 职场文书
购房公证委托书(2014版)
2014/09/12 职场文书
2015年乡镇平安建设工作总结
2015/05/13 职场文书
开学第一周总结
2015/07/16 职场文书
go语言-在mac下brew升级golang
2021/04/25 Golang
HTML5来实现本地文件读取和写入的实现方法
2021/05/25 HTML / CSS
MySQL CHAR和VARCHAR该如何选择
2021/05/31 MySQL