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通过socket查询whois的方法
Jul 18 Python
尝试用最短的Python代码来实现服务器和代理服务器
Jun 23 Python
Python3爬虫学习之爬虫利器Beautiful Soup用法分析
Dec 12 Python
python读取txt文件中特定位置字符的方法
Dec 24 Python
pandas数据集的端到端处理
Feb 18 Python
pycharm 批量修改变量名称的方法
Aug 01 Python
Python中Subprocess的不同函数解析
Dec 10 Python
python中return如何写
Jun 18 Python
Python爬取微信小程序Charles实现过程图解
Sep 29 Python
python3列表删除大量重复元素remove()方法的问题详解
Jan 04 Python
Python如何导出导入所有依赖包详解
Jun 08 Python
python使用pymysql模块操作MySQL
Jun 16 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
虫族 ZERG 概述
2020/03/14 星际争霸
PHP中Date获取时间不正确怎么办
2008/06/05 PHP
smarty模板中使用get、post、request、cookies、session变量的方法
2014/04/24 PHP
php获取网页中图片、DIV内容的简单方法
2014/06/19 PHP
PHP采用超长(超大)数字运算防止数字以科学计数法显示的方法
2016/04/01 PHP
Thinkphp 框架基础之入口文件功能、定义与用法分析
2020/04/27 PHP
Javascript面向对象扩展库代码分享
2012/03/27 Javascript
js实现图片放大缩小功能后进行复杂排序的方法
2012/11/08 Javascript
jquery实现简单的拖拽效果实例兼容所有主流浏览器
2013/06/21 Javascript
Jquery动态进行图片缩略的原理及实现
2013/08/13 Javascript
javascript实现点击按钮让DIV层弹性移动的方法
2015/02/24 Javascript
浅析jQuery Ajax请求参数和返回数据的处理
2016/02/24 Javascript
js中 计算两个日期间的工作日的简单实例
2016/08/08 Javascript
JS版微信6.0分享接口用法分析
2016/10/13 Javascript
如何提高数据访问速度
2016/12/26 Javascript
javascript笔记之匿名函数和闭包
2017/02/06 Javascript
jquery滚动条插件slimScroll使用方法
2017/02/09 Javascript
jquery easyui dataGrid动态改变排序字段名的方法
2017/03/02 Javascript
vue项目使用高德地图的定位及关键字搜索功能的实例代码(踩坑经验)
2020/03/07 Javascript
python判断字符串是否包含子字符串的方法
2015/03/24 Python
python对html代码进行escape编码的方法
2015/05/04 Python
Python使用matplotlib绘制动画的方法
2015/05/20 Python
Python实现二维有序数组查找的方法
2016/04/27 Python
对python xlrd读取datetime类型数据的方法详解
2018/12/26 Python
Python 运行 shell 获取输出结果的实例
2019/01/07 Python
python ftplib模块使用代码实例
2019/12/31 Python
通过实例解析python描述符原理作用
2020/01/22 Python
《美丽的彩虹》教学反思
2014/02/25 职场文书
我们的节日端午节活动方案
2014/03/02 职场文书
艺人经纪人岗位职责
2014/04/15 职场文书
员工合理化建议书
2014/05/19 职场文书
社区娱乐活动方案
2014/08/21 职场文书
不同意离婚代理词
2015/05/23 职场文书
父亲节感言
2015/08/03 职场文书
详解Python 3.10 中的新功能和变化
2021/04/28 Python
一小时学会TensorFlow2之基本操作2实例代码
2021/09/04 Python