1. 如果往数据库中增加数据的时候,希望生成一个日志。在数据保存之前以及保存之后。

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

1、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内置的信号,仅需注册指定信号,当程序执行相应操作时,自动触发注册函数:

from django.core.signals import request_finished
from django.core.signals import request_started
from django.core.signals import got_request_exception from django.db.models.signals import class_prepared
from django.db.models.signals import pre_init, post_init
from django.db.models.signals import pre_save, post_save
from django.db.models.signals import pre_delete, post_delete
from django.db.models.signals import m2m_changed
from django.db.models.signals import pre_migrate, post_migrate from django.test.signals import setting_changed
from django.test.signals import template_rendered from django.db.backends.signals import connection_created def callback(sender, **kwargs):
print("xxoo_callback")
print(sender,kwargs) xxoo.connect(callback) #在XXOO信号中注册一个callback函数
# xxoo指上述导入的内容

2. 仅仅注册了函数还不够,此时别人还不知道它的存在。得先把信号注册到Django里面,运行的时候才能生效。

在__init__.py中导入 sg,  这样程序一运行的时候,就会自动把sg.py加载到内存中。

写URL,运行看结果:

运行结果:

3. Django里面还支持自定义信号

1创建信号;2主动触发信号(send);3在信号里面注册函数。

自定义信号实例:

1)创建信号,注册函数到信号里面。

2) 触发信号

最新文章

  1. IIS访问共享文件详解
  2. ZOJ Problem Set - 1350 The Drunk Jailer ac代码 memset
  3. indexPathForCell returns nil since ios7
  4. linux下的shell运算(加、减、乘、除)
  5. 3DS MAX调慢摄像机动画
  6. POJ 2677 Tour
  7. PhpSrom安装xdebug
  8. node.js下mongoose简单操作实例
  9. .NetCore多文件上传进度的示例
  10. Alfred 3 如何设置默认搜索引擎(以百度搜索为例)
  11. 使用PL/SQL连接Oracle时报错ORA-12541: TNS: 无监听程序
  12. BitTorrent Sync 基于BT的文件同步
  13. Caltech数据使用详情
  14. 学习 rostopic
  15. centos6 下 yum 升级php5 到 php7
  16. Python dict 出现 Key error
  17. TOMCAT问题总结
  18. Python 列表 index() 方法
  19. UVa 673 Parentheses Balance (stack)
  20. Text Relatives II

热门文章

  1. javaweb学习5——JSP
  2. Python 字符串 整数 浮点数
  3. 高可用OpenStack(Queen版)集群-13.分布式存储Ceph
  4. python 拾遗
  5. Daily Scrum (2015/10/30)
  6. 20162325 金立清 S2 W5 C14
  7. 06慕课网《进击Node.js基础(一)》作用域和上下文
  8. Class 2 四则运算2的设计思路
  9. mvc的过滤器学习-资料查询
  10. 使用成员资格管理用户Membership