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实例之wxpython中Frame使用方法
Jun 09 Python
Python实现批量检测HTTP服务的状态
Oct 27 Python
Python 中迭代器与生成器实例详解
Mar 29 Python
python数据处理实战(必看篇)
Jun 11 Python
python将控制台输出保存至文件的方法
Jan 07 Python
python脚本开机自启的实现方法
Jun 28 Python
Django中提供的6种缓存方式详解
Aug 05 Python
15行Python代码实现免费发送手机短信推送消息功能
Feb 27 Python
面向新手解析python Beautiful Soup基本用法
Jul 11 Python
解决PyCharm IDE环境下,执行unittest不生成测试报告的问题
Sep 03 Python
python实现代码审查自动回复消息
Feb 01 Python
Python 制作自动化翻译工具
Apr 25 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
二次元帅气男生排行榜,只想悄悄收藏系列
2020/03/04 日漫
PHP程序员基本要求和必备技能
2014/05/09 PHP
PhpStorm 如何优雅的调试Hyperf的方法步骤
2019/11/24 PHP
xml 封装与解析(javascript和C#中)
2009/07/26 Javascript
IE6弹出“已终止操作”的解决办法
2010/11/27 Javascript
js控制CSS样式属性语法对照表
2012/12/11 Javascript
js点击更换背景颜色或图片的实例代码
2013/06/25 Javascript
JavaScript函数参数使用带参数名的方式赋值传入的方法
2015/03/19 Javascript
AngularJS 依赖注入详解及示例代码
2016/08/17 Javascript
jQuery中ScrollTo用法示例
2016/09/04 Javascript
详谈js中标准for循环与foreach(for in)的区别
2017/11/02 Javascript
VUEJS 2.0 子组件访问/调用父组件的实例
2018/02/10 Javascript
vue.js项目nginx部署教程
2018/04/05 Javascript
React Native日期时间选择组件的示例代码
2018/04/27 Javascript
vue使用laydate时间插件的方法
2018/11/14 Javascript
详解如何在vscode里面调试js和node.js的方法步骤
2018/12/24 Javascript
jQuery实现的中英文切换功能示例
2019/01/11 jQuery
JavaScript实现多张图片放大镜效果示例【不限定图片尺寸,rem单位】
2019/05/14 Javascript
js实现九宫格抽奖
2020/03/19 Javascript
VUE Elemen-ui之穿梭框使用方法详解
2021/01/19 Javascript
[12:36]《DOTA2》国服注册与激活指南全攻略
2013/04/28 DOTA
python改变日志(logging)存放位置的示例
2014/03/27 Python
检测python爬虫时是否代理ip伪装成功的方法
2019/07/12 Python
python实现与redis交互操作详解
2020/04/21 Python
css3中新增的样式使用示例附效果图
2014/08/19 HTML / CSS
全球游戏Keys和卡片市场:GamesDeal
2018/03/28 全球购物
网上蛋糕店创业计划书
2014/01/24 职场文书
销售人员自我评价
2014/02/01 职场文书
意外伤害赔偿协议书范文
2014/09/23 职场文书
汽车销售助理岗位职责
2015/04/14 职场文书
节约用电通知
2015/04/25 职场文书
遗愿清单观后感
2015/06/09 职场文书
创业计划书之寿司
2019/07/19 职场文书
八年级作文之我的母亲
2019/12/10 职场文书
Python图像处理之图像拼接
2021/04/28 Python
Java使用jmeter进行压力测试
2021/07/09 Java/Android