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爬虫之爬虫框架Scrapy安装配置
Nov 06 Python
Python set集合类型操作总结
Nov 07 Python
详解Python使用simplejson模块解析JSON的方法
Mar 24 Python
Python学习之用pygal画世界地图实例
Dec 07 Python
pygame游戏之旅 python和pygame安装教程
Nov 20 Python
如何使用Python 打印各种三角形
Jun 28 Python
Django 请求Request的具体使用方法
Nov 11 Python
Django模板获取field的verbose_name实例
May 19 Python
Python超简单容易上手的画图工具库推荐
May 10 Python
pytorch model.cuda()花费时间很长的解决
Jun 01 Python
python基础入门之普通操作与函数(三)
Jun 13 Python
教你使用Python获取QQ音乐某个歌手的歌单
Apr 03 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/10/09 PHP
php切割页面div内容的实现代码分享
2012/07/31 PHP
教你如何快捷的使用cmd访问mysql小技巧
2014/05/26 PHP
Yii rules常用规则示例
2016/03/15 PHP
PHP批量删除jQuery操作
2017/07/23 PHP
Apply an AutoFormat to an Excel Spreadsheet
2007/06/12 Javascript
自制基于jQuery的智能提示插件一枚
2011/02/18 Javascript
固定背景实现的背景滚动特效示例分享
2013/05/19 Javascript
详解addEventListener的三个参数之useCapture
2015/03/16 Javascript
Bootstrap3学习笔记(三)之表格
2016/05/20 Javascript
jQuery插件jqGrid动态获取列和列字段的方法
2017/03/03 Javascript
详解Node项目部署到云服务器上
2017/07/12 Javascript
BootStrap的双日历时间控件使用
2017/07/25 Javascript
Vue父子组件双向绑定传值的实现方法
2018/07/31 Javascript
深入浅析js原型链和vue构造函数
2018/10/25 Javascript
详解在create-react-app使用less与antd按需加载
2018/12/06 Javascript
vscode配置vue下的es6规范自动格式化详解
2019/03/20 Javascript
[00:50]深扒TI7聊天轮盘语音出处6
2017/05/11 DOTA
[01:14]TI珍贵瞬间系列(六):冠军
2020/08/30 DOTA
详解在Python的Django框架中创建模板库的方法
2015/07/20 Python
python条件变量之生产者与消费者操作实例分析
2017/03/22 Python
不同版本中Python matplotlib.pyplot.draw()界面绘制异常问题的解决
2017/09/24 Python
Python使用matplotlib的pie函数绘制饼状图功能示例
2018/01/08 Python
基于django传递数据到后端的例子
2019/08/16 Python
python是否适合网页编程详解
2019/10/04 Python
django框架使用views.py的函数对表进行增删改查内容操作详解【models.py中表的创建、views.py中函数的使用,基于对象的跨表查询】
2019/12/12 Python
解决pycharm编辑区显示yaml文件层级结构遇中文乱码问题
2020/04/27 Python
导致python中import错误的原因是什么
2020/07/01 Python
Python配置pip国内镜像源的实现
2020/08/20 Python
Linux系统下升级pip的完整步骤
2021/01/31 Python
美国购买当代和现代家具网站:MODTEMPO
2018/07/20 全球购物
什么是Smarty变量操作符?如何使用Smarty变量操作符
2014/07/18 面试题
党的群众路线教育实践活动对照检查材料范文
2014/09/24 职场文书
大学生预备党员自我评价
2015/03/04 职场文书
干部理论学习心得体会
2016/01/21 职场文书
mysql如何查询连续记录
2022/05/11 MySQL