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创建文件和追加文件内容实例
Oct 21 Python
Python日志模块logging简介
Apr 13 Python
python分析网页上所有超链接的方法
May 08 Python
Python科学计算之Pandas详解
Jan 15 Python
Python中一行和多行import模块问题
Apr 01 Python
PyQt5实现拖放功能
Apr 25 Python
Python异常的检测和处理方法
Oct 26 Python
在Python中字典根据多项规则排序的方法
Jan 21 Python
python可视化篇之流式数据监控的实现
Aug 07 Python
Python函数装饰器原理与用法详解
Aug 16 Python
python查找特定名称文件并按序号、文件名分行打印输出的方法
Apr 24 Python
Django设置Postgresql的操作
May 14 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类
2006/11/27 PHP
php自定义函数截取汉字长度
2014/05/15 PHP
php实现微信企业号支付个人的方法详解
2017/07/26 PHP
laravel5表单唯一验证的实例代码
2019/09/30 PHP
js 设置选中行的样式的实现代码
2010/05/24 Javascript
JavaScript之引用类型介绍
2012/08/10 Javascript
如何在一个页面显示多个百度地图
2013/04/07 Javascript
不使用浏览器运行javascript代码的方法
2013/07/24 Javascript
js中function()使用方法
2013/12/24 Javascript
javascript实现Table间隔色以及选择高亮(和动态切换数据)的方法
2015/05/14 Javascript
JavaScript中的setUTCDate()方法使用详解
2015/06/11 Javascript
jQuery实现带滑动条的菜单效果代码
2015/08/26 Javascript
深入理解Vue Computed计算属性原理
2018/05/29 Javascript
vue实现购物车加减
2020/05/30 Javascript
三剑客:offset、client和scroll还傻傻分不清?
2020/12/04 Javascript
[01:22:42]2014 DOTA2华西杯精英邀请赛 5 24 DK VS LGD
2014/05/26 DOTA
[48:48]VGJ.T vs Liquid 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
Python之str操作方法(详解)
2017/06/19 Python
Python字符串和字典相关操作的实例详解
2017/09/23 Python
python 实现对文件夹内的文件排序编号
2018/04/12 Python
Python学习笔记基本数据结构之序列类型list tuple range用法分析
2019/06/08 Python
python matplotlib如何给图中的点加标签
2019/11/14 Python
利用python在excel中画图的实现方法
2020/03/17 Python
Python 多进程、多线程效率对比
2020/11/19 Python
python爬虫中抓取指数的实例讲解
2020/12/01 Python
美国在线购买和出售礼品卡网站:EJ Gift Cards
2019/06/09 全球购物
Nike墨西哥官网:Nike MX
2020/08/30 全球购物
班主任寄语大全
2014/04/04 职场文书
股权转让协议书
2014/04/12 职场文书
《猴子种果树》教学反思
2014/04/26 职场文书
祖国在我心中的演讲稿
2014/05/04 职场文书
2014最新房贷收入证明范本
2014/09/12 职场文书
大学生社区义工服务心得体会
2016/01/22 职场文书
Spring中的使用@Async异步调用方法
2021/11/01 Java/Android
Mongodb 迁移数据块的流程介绍分析
2022/04/18 MongoDB
数据设计之权限的实现
2022/08/05 MySQL