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中__call__方法示例分析
Oct 11 Python
Python可变参数函数用法实例
Jul 07 Python
Python实现遍历目录的方法【测试可用】
Mar 22 Python
Python多进程与服务器并发原理及用法实例分析
Aug 21 Python
Python list列表中删除多个重复元素操作示例
Feb 27 Python
python、Matlab求定积分的实现
Nov 20 Python
python线程池如何使用
May 28 Python
Python .py生成.pyd文件并打包.exe 的注意事项说明
Mar 04 Python
Python+uiautomator2实现自动刷抖音视频功能
Apr 29 Python
python 如何获取页面所有a标签下href的值
May 06 Python
pandas数值排序的实现实例
Jul 25 Python
python编程项目中线上问题排查与解决
Nov 01 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
PHP的范围解析操作符(::)的含义分析说明
2011/07/03 PHP
YII2框架中excel表格导出的方法详解
2017/07/21 PHP
contains和compareDocumentPosition 方法来确定是否HTML节点间的关系
2011/09/13 Javascript
jQuery EasyUI API 中文文档 - ProgressBar 进度条
2011/09/29 Javascript
JavaScript脚本判断蜘蛛来源的方法
2015/09/22 Javascript
使用jQuery判断浏览器滚动条位置的方法
2016/05/30 Javascript
利用Javascript仿Excel的数据透视分析功能
2016/09/07 Javascript
利用JQuery阻止事件冒泡
2016/12/01 Javascript
你不知道的 javascript【推荐】
2017/01/08 Javascript
使用jquery判断一个元素是否含有一个指定的类(class)实例
2017/02/12 Javascript
JavaScript装饰器函数(Decorator)实例详解
2017/03/30 Javascript
Vue组件通信实践记录(推荐)
2017/08/15 Javascript
浅谈webpack+react多页面开发终极架构
2018/11/11 Javascript
微信小程序局部刷新触发整页刷新效果的实现代码
2018/11/21 Javascript
node实现爬虫的几种简易方式
2019/08/22 Javascript
js实现提交前对列表数据的增删改查
2020/01/16 Javascript
python采集博客中上传的QQ截图文件
2014/07/18 Python
在Python中使用元类的教程
2015/04/28 Python
利用numpy和pandas处理csv文件中的时间方法
2018/04/19 Python
使用pandas把某一列的字符值转换为数字的实例
2019/01/29 Python
Python第三方库h5py_读取mat文件并显示值的方法
2019/02/08 Python
使用 Python 处理 JSON 格式的数据
2019/07/22 Python
python实现微信小程序用户登录、模板推送
2019/08/28 Python
Python zip函数打包元素实例解析
2019/12/11 Python
Python操作Excel把数据分给sheet
2020/05/20 Python
python 多线程共享全局变量的优劣
2020/09/24 Python
简述python&pytorch 随机种子的实现
2020/10/07 Python
在加拿大在线租赁和购买电子游戏:Game Access
2019/09/02 全球购物
顶撞老师检讨书
2014/02/07 职场文书
学生周末回家住宿长期请假条
2014/02/15 职场文书
重阳节标语大全
2014/10/07 职场文书
2015领导干部廉洁自律工作总结
2015/07/23 职场文书
nginx 多个location转发任意请求或访问静态资源文件的实现
2021/03/31 Servers
Java基础之详解HashSet的使用方法
2021/06/30 Java/Android
一篇文章带你掌握SQLite3基本用法
2022/06/14 数据库
阿里面试Nacos配置中心交互模型是push还是pull原理解析
2022/07/23 Java/Android