django实现类似触发器的功能

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

这篇教程分别会讲解

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

相关环境 python 3.6 django2.0

我们一起来看看需求

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

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

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

一起来看看博客计数模型

再来看看博客模型

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

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

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

看看我们的评论模型

这个时候就不能像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下,实现类似触发器的效果,触发insert操作,重写模型下的save方法

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

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

(0)

相关推荐

  • Django实现简单网页弹出警告代码

    功能所在位置 该功能运用了django.contrib.messages这个库,再django项目中srtting.py文件中的38行,APP注册部分 INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticf

  • django的ORM模型的实现原理

    ORM模型介绍 随着项目越来越大,采用写原生SQL的方式在代码中会出现大量的SQL语句,那么问题就出现了: SQL语句重复利用率不高,越复杂的SQL语句条件越多,代码越长.会出现很多相近的SQL语句. 很多SQL语句是在业务逻辑中拼出来的,如果有数据库需要更改,就要去修改这些逻辑,这会很容易漏掉对某些SQL语句的修改. 写SQL时容易忽略web安全问题,给未来造成隐患.SQL注入. ORM ,全称 Object Relational Mapping ,中文叫做对象关系映射,通过 ORM 我们可以

  • Django实现分页显示效果

    Django中提供了一个类Paginator专门用来管理和处理分页数据,所以我们在使用之前先导入好相应的类,,另外这里我们也导入了待会会用到的处理异常的两个类 EmptyPage和PageNotAnInteger: from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger 接着编写好视图函数test: def test(request): course_list=CourseVideo.objects.all

  • django实现类似触发器的功能

    这篇博客给大家讲解在django中类似触发器的效果 这篇教程分别会讲解 插入记录后,删除记录前,删除记录后这三个部分 相关环境 python 3.6 django2.0 我们一起来看看需求 有一个博客模型 ,有一个 博客计数模型 现在的需求是每要创建一个博客,就把博客计数模型中的计数字段初始化为0,我们不禁想到了触发器 在创建完blog记录后,我们就对应着在博客计数表上进行相关操作. 一起来看看博客计数模型 再来看看博客模型 可以看到,在产生模型实例(即数据库表产生新纪录)的时候,重写父类模型中

  • Django REST framework 限流功能的使用

    正文开始 先说一个限流这个概念,最早接触这个概念是在前端.真实的业务场景是在搜索框中输入文字进行搜索时,并不希望每输一个字符都去调用后端接口,而是有停顿后才真正的调用接口.这个功能很有必要,一方面减少前端请求与渲染的压力,同时减轻后端接口访问的压力.类似前端的功能的代码如下: // 前端函数限流示例 function throttle(fn, delay) { var timer; return function () { var _this = this; var args = argumen

  • Django Admin实现上传图片校验功能

    Django 为未来的开发人员提供了许多功能:一个成熟的标准库,一个活跃的用户社区,以及 Python 语言的所有好处.虽然其他 Web 框架也声称能提供同样的内容,但 Django 的独特之处在于它内置了管理应用程序 -- admin. admin 提供了开箱即用的高级 Create-Read-Update-Delete (CRUD) 功能,减少了重复工作所需的时间.这是许多 Web 应用程序的关键所在,程序员可以在开发时快速浏览他们的数据库模型:非技术最终用户可以在部署时使用 admin 添

  • Django内容增加富文本功能的实例

    缺少富文本,形式过于单一,不便于浏览与阅读. 一种可行的方法记录如下: 1-下载第三方富文本KindEditor,连接http://kindeditor.net/down.php或者baidu. 2-解压到Django项目下的static/js下,如图所示: 默认没有config.js,需要自行建立config.js,其中内容可参照KindEditor官网或以下代码: KindEditor.ready(function(K) { K.create('textarea',{ width:700,

  • javascript实现类似百度分享功能的方法

    本文实例讲述了javascript实现类似百度分享功能的方法.分享给大家供大家参考.具体如下: 像腾讯,开心社区都提供这种分享接口的,做百度分享功能很简单的 一般网站要接入分享功能,大部分都用百度分享和addthis的代码,可是自己定制性太差,该分享功能样式都可以自己修改,简洁没过多js代码,大大提高网页加载速度. 运行效果如下图所示: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "htt

  • Django实现发送邮件找回密码功能

    在各大网站上,一定都遇到过找回密码的问题,通常采用的方式是通过发送带有验证码的邮件进行身份验证,本文将介绍通过Django实现邮件找回密码功能. 找回密码流程 功能流程: 1.首先在用户登录界面,添加"忘记密码"链接 2.生成随机验证码,发送邮件到用户信息中填写邮箱 3.在重置密码页面,验证填写验证码是否需匹配 4.重置密码成功,重新进入到登录页面 技术点: 1.发送邮件使用Django内置的django.core.mail实现 2.重置密码页面验证验证码填写是否匹配,提前将发送的验证

  • Django 实现前端图片压缩功能的方法

    思路: <img alt="" src="/img/图片真实地址" ></img> 上面是一个典型的HTML中的图片,在django中,src对应的path会经过url进行过滤处理,所以可以通过写view过滤器的方式来实现图片压缩,代码如下 url url(r'^img/(?P<path>(.+))/$',img), view def img(request,path): im=Image.open(settings.STATIC

  • django中的图片验证码功能

    python的验证码库(captcha) 将验证码做成这样: 是不是和各大网页的图片源地址是一样,话不多说,让我们看代码: 我是用django和python中的captcha库做成 的 创建一个captcha_image.py: from captcha.image import ImageCaptcha import random class Captcha_Get(): def __init__(self, CHAR_SET = ['0', '1', '2', '3', '4', '5',

  • 通过 Django Pagination 实现简单分页功能

    作者:HelloGitHub-追梦人物 文中所涉及的示例代码,已同步更新到 HelloGitHub-Team 仓库 当博客上发布的文章越来越多时,通常需要进行分页显示,以免所有的文章都堆积在一个页面,影响用户体验. Django 内置的 Pagination 能够帮助我们实现简单的分页功能,在上一篇教程中我们使用脚本批量生成了几百篇博客文章,正好用于测试分页效果. Paginator 类的常用方法 分页功能由 Django 内置的 Paginator 类提供,这个类位于 django.core.

  • Python项目实战之使用Django框架实现支付宝付款功能

    一.前言 春节即将来临,大家肯定各种掏腰包花花花,小编相信大家在支付时候,微信.支付宝支付肯定是优先选择.今天小编心血来潮,为大家带来一个很有趣的项目,那就是使用Python web框架Django来实现支付宝支付,废话不多说,一起来看看如何实现吧. 二.建立django应用 我们来建立一个Django项目然后在里面创建一个应用,如图: 三.配置并启动 然后我们设置urls文件的内容,如图: 然后再在子应用中创建一个urls.py文件,当然你也可以直接将一些视图函数写在项目中的urls.py文件

随机推荐