Django框架 信号调度原理解析


Posted in Python onSeptember 04, 2019

Django中提供了“信号调度”,用于在框架执行操作时解耦。通俗来讲,就是一些动作发生的时候,信号允许特定的发送者去提醒一些接受者。

Django内置信号

Model signals
  pre_init          # django的modal执行其构造方法前,自动触发
  post_init          # django的modal执行其构造方法后,自动触发
  pre_save          # django的modal对象保存前,自动触发
  post_save          # django的modal对象保存后,自动触发
  pre_delete         # django的modal对象删除前,自动触发
  post_delete         # django的modal对象删除后,自动触发
  m2m_changed         # django的modal中使用m2m字段操作第三张表(add,remove,clear)前后,自动触发
  class_prepared       # 程序启动时,检测已注册的app中modal类,对于每一个类,自动触发
Management signals
  pre_migrate         # 执行migrate命令前,自动触发
  post_migrate        # 执行migrate命令后,自动触发
Request/response signals
  request_started       # 请求到来前,自动触发
  request_finished      # 请求结束后,自动触发
  got_request_exception    # 请求异常后,自动触发
Test signals
  setting_changed       # 使用test测试修改配置文件时,自动触发
  template_rendered      # 使用test测试渲染模板时,自动触发
Database Wrappers
  connection_created     # 创建数据库连接时,自动触发

对于Django内置的信号,仅需注册指定信号,当程序执行相应操作时,自动触发注册函数:

示例:

#在model表中添加/删除记录时执行响应的方法
from django.db.models import signals

def before_save1(*args,**kwargs):
  print('有车来了,我要服务了--》',args,kwargs)

def before_save2(*args,**kwargs):
  print('有车来了,我要服务了--》',args,kwargs)

def after_save1(*args,**kwargs):
  print('有车来了,完事了--》',args,kwargs)

signals.pre_save.connect(before_save1)
signals.pre_save.connect(before_save2)
signals.post_save.connect(after_save1)

自定义信号

定义信号

import django.dispatch
pizza_done = django.dispatch.Signal(providing_args=["toppings", "size"])

注册信号

def callback(sender, **kwargs):
  print("callback")
  print(sender,kwargs)
pizza_done.connect(callback) 

触发信号

from 路径 import pizza_done
pizza_done.send(sender='seven',toppings=123, size=456)

由于内置信号的触发者已经集成到Django中,所以其会自动调用,而对于自定义信号则需要开发者在任意位置触发。 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python简单操作sqlite3的方法示例
Mar 22 Python
Python中执行存储过程及获取存储过程返回值的方法
Oct 07 Python
使用Python的package机制如何简化utils包设计详解
Dec 11 Python
Python通过Django实现用户注册和邮箱验证功能代码
Dec 11 Python
python3 遍历删除特定后缀名文件的方法
Apr 23 Python
完美解决在oj中Python的循环输入问题
Jun 25 Python
Python解决线性代数问题之矩阵的初等变换方法
Dec 12 Python
Django 反向生成url实例详解
Jul 30 Python
适合Python初学者的一些编程技巧
Feb 12 Python
Python中qutip用法示例详解
Oct 02 Python
Python实现智慧校园自动评教全新版
Jun 18 Python
Python jiaba库的使用详解
Nov 23 Python
Django Admin中增加导出Excel功能过程解析
Sep 04 #Python
Django Admin中增加导出CSV功能过程解析
Sep 04 #Python
Python 自动登录淘宝并保存登录信息的方法
Sep 04 #Python
通过Python编写一个简单登录功能过程解析
Sep 04 #Python
利用 Flask 动态展示 Pyecharts 图表数据方法小结
Sep 04 #Python
python3实现微型的web服务器
Sep 03 #Python
Python面向对象之Web静态服务器
Sep 03 #Python
You might like
在任意字符集下正常显示网页的方法一
2007/04/01 PHP
PHP 文件上传全攻略
2010/04/28 PHP
php约瑟夫问题解决关于处死犯人的算法
2015/03/23 PHP
php根据数据id自动生成编号的实现方法
2016/10/16 PHP
PHP hex2bin()函数用法讲解
2019/02/25 PHP
php反射学习之依赖注入示例
2019/06/14 PHP
解决Laravel5.2 Auth认证退出失效的问题
2019/10/14 PHP
JavaScript在IE中“意外地调用了方法或属性访问”
2008/11/19 Javascript
div模拟滚动条效果示例代码
2013/10/16 Javascript
5款JavaScript代码压缩工具推荐
2014/07/07 Javascript
js Calender控件使用详解
2015/01/05 Javascript
用JavaScript获取页面文档内容的实现代码
2016/06/10 Javascript
详解Angular的数据显示优化处理
2016/12/26 Javascript
js鼠标经过tab选项卡时实现切换延迟
2017/03/24 Javascript
js实现下拉框二级联动
2018/12/04 Javascript
在Layui中实现开关按钮的效果实例
2019/09/29 Javascript
js+cavans实现图片滑块验证
2020/09/29 Javascript
Python中的tuple元组详细介绍
2015/02/02 Python
Python中使用插入排序算法的简单分析与代码示例
2016/05/04 Python
Python基于回溯法子集树模板实现图的遍历功能示例
2017/09/05 Python
python中闭包Closure函数作为返回值的方法示例
2017/12/17 Python
使用Python进行AES加密和解密的示例代码
2018/02/02 Python
python Spyder界面无法打开的解决方法
2018/04/27 Python
Python3中函数参数传递方式实例详解
2019/05/05 Python
Django 大文件下载实现过程解析
2019/08/01 Python
python实现LRU热点缓存及原理
2019/10/29 Python
Python编程快速上手——疯狂填词程序实现方法分析
2020/02/29 Python
Python基础类继承重写实现原理解析
2020/04/03 Python
学年自我鉴定范文
2013/10/01 职场文书
办公室主任职责范文
2013/11/08 职场文书
老师给学生的表扬信
2014/01/17 职场文书
《那片绿绿的爬山虎》教学反思
2014/02/27 职场文书
供货协议书范本
2014/04/22 职场文书
晚自修旷课检讨书怎么写
2014/11/17 职场文书
JavaScript实例 ODO List分析
2022/01/22 Javascript
HTML CSS 一个标签实现带动画的抖音LOGO
2022/04/26 HTML / CSS