1、信号,其实就是钩子,可以在上面几种情况下定义执行某个函数,我们一般在project的__init__文件中定义,下面就是一个例子

2、用到模块需要导入,分别在下面的几个路径中

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
from django.db.models.signals import post_init from django.db.models.signals import pre_save
from django.db.models.signals import post_save from django.db.models.signals import pre_delete
from django.db.models.signals import post_delete from django.db.models.signals import m2m_changed
from django.db.models.signals import pre_migrate
from django.db.models.signals import post_migrate from django.test.signals import setting_changed
from django.test.signals import template_rendered from django.db.backends.signals import connection_created

  

3、下面就是一个使用的例子,把函数注册到信号中

# 1、定义执行的函数
def callback1(sender,**kwargs):
print("before pre_migrate")
print(sender,kwargs) # 定义执行的函数
def callback2(sender,**kwargs):
print("after pre_migrate")
print(sender,kwargs) # 在执行migrate之前会执行的函数
pre_migrate.connect(callback1) # 在执行migrate之后执行的函数
post_migrate.connect(callback2)

  

4、下面我们执行migrate命令就会有下面提示

E:\python\django_last>python manage.py migrate
Operations to perform:
Apply all migrations: admin, app1, auth, contenttypes, sessions
before pre_migrate
<AdminConfig: admin> {'signal': <django.dispatch.dispatcher.Signal object at 0x01C755D0>, 'app_config': <AdminConfig: admin>, 'verbosity': 1, 'interactive': True, 'using': 'default', 'apps': <django.db.migrations
.state.StateApps object at 0x02CF1130>, 'plan': []}
before pre_migrate
<AuthConfig: auth> {'signal': <django.dispatch.dispatcher.Signal object at 0x01C755D0>, 'app_config': <AuthConfig: auth>, 'verbosity': 1, 'interactive': True, 'using': 'default', 'apps': <django.db.migrations.sta
te.StateApps object at 0x02CF1130>, 'plan': []}
before pre_migrate
<ContentTypesConfig: contenttypes> {'signal': <django.dispatch.dispatcher.Signal object at 0x01C755D0>, 'app_config': <ContentTypesConfig: contenttypes>, 'verbosity': 1, 'interactive': True, 'using': 'default', '
apps': <django.db.migrations.state.StateApps object at 0x02CF1130>, 'plan': []}
before pre_migrate
<SessionsConfig: sessions> {'signal': <django.dispatch.dispatcher.Signal object at 0x01C755D0>, 'app_config': <SessionsConfig: sessions>, 'verbosity': 1, 'interactive': True, 'using': 'default', 'apps': <django.d
b.migrations.state.StateApps object at 0x02CF1130>, 'plan': []}
before pre_migrate
<App1Config: app1> {'signal': <django.dispatch.dispatcher.Signal object at 0x01C755D0>, 'app_config': <App1Config: app1>, 'verbosity': 1, 'interactive': True, 'using': 'default', 'apps': <django.db.migrations.sta
te.StateApps object at 0x02CF1130>, 'plan': []}
Running migrations:
No migrations to apply.
after pre_migrate
<AdminConfig: admin> {'signal': <django.dispatch.dispatcher.Signal object at 0x01C75610>, 'app_config': <AdminConfig: admin>, 'verbosity': 1, 'interactive': True, 'using': 'default', 'apps': <django.db.migrations
.state.StateApps object at 0x03183FD0>, 'plan': []}
after pre_migrate
<AuthConfig: auth> {'signal': <django.dispatch.dispatcher.Signal object at 0x01C75610>, 'app_config': <AuthConfig: auth>, 'verbosity': 1, 'interactive': True, 'using': 'default', 'apps': <django.db.migrations.sta
te.StateApps object at 0x03183FD0>, 'plan': []}
after pre_migrate
<ContentTypesConfig: contenttypes> {'signal': <django.dispatch.dispatcher.Signal object at 0x01C75610>, 'app_config': <ContentTypesConfig: contenttypes>, 'verbosity': 1, 'interactive': True, 'using': 'default', '
apps': <django.db.migrations.state.StateApps object at 0x03183FD0>, 'plan': []}
after pre_migrate
<SessionsConfig: sessions> {'signal': <django.dispatch.dispatcher.Signal object at 0x01C75610>, 'app_config': <SessionsConfig: sessions>, 'verbosity': 1, 'interactive': True, 'using': 'default', 'apps': <django.d
b.migrations.state.StateApps object at 0x03183FD0>, 'plan': []}
after pre_migrate
<App1Config: app1> {'signal': <django.dispatch.dispatcher.Signal object at 0x01C75610>, 'app_config': <App1Config: app1>, 'verbosity': 1, 'interactive': True, 'using': 'default', 'apps': <django.db.migrations.sta
te.StateApps object at 0x03183FD0>, 'plan': []} E:\python\django_last>

  

上面是python给我们定义的信号,我们还可以自定义信号,下面说一下如何自定义信号,也是写在projec的__init__文件中

1、注册我们的信号,和信号的里的函数

# 1、导入模块
import django.dispatch # 2、注册一个信号
test = django.dispatch.Signal(providing_args=["aa","bb"]) # 这里的aa和bb相当于形参 # 3、定义一个触发信号要执行的函数
def callback3(sender,**kwargs):
print("自定义信号")
print(sender,kwargs) # 4、给信号注册一个函数
test.connect(callback3)

  

2、在函数使用自定义的信号

# 使用我们自定义的信号
def cus_signal(request): # 导入自定义的信号,这里需要注意,导入__init__下的信号,直接用下面的方式就可以了
from django_last import test # 触发信号,这里要记得要传参数,sender的意思是 谁发送的信号
test.send(sender="自定义信号",aa="django",bb="python")
return HttpResponse("自定义信号")

  

3、效果如下

无论是django定义的信号,还是我们自定义的信号,我们就可以为一个信号注册多个函数,这些多个函数会按照注册的顺序执行

django的 信号的更多相关文章

  1. django signals 信号

    django signals 信号 配置方式 app下的 __init__.py default_app_config="web.apps.WebConfig" #初始化app配置 ...

  2. Django之信号和序列化

    前言 Django的信号要从一张抽象图和一个需求说起: 赛道:Django 赛车:http请求 基础设施:Django设置的信号 一.Django内置信号类型 1.既然赛道上有各种基础设置,那么Dja ...

  3. Django 之 信号机制

    Django 之 信号机制 Django提供一种信号机制.其实就是观察者模式,又叫发布-订阅(Publish/Subscribe) . 当发生一些动作的时候,发出信号,然后监听了这个信号的函数就会执行 ...

  4. Django 的信号 & Flask 的信号

    信号:框架内部已帮助开发者预留的可扩展的位置 一.Django 的信号 项目目录结构: django_signal |--- app01 |--- models.py |--- views.py .. ...

  5. django的信号

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

  6. Django的信号机制

    Django提供一种信号机制.其实就是观察者模式,又叫发布-订阅(Publish/Subscribe) .当发生一些动作的时候,发出信号,然后监听了这个信号的callback函数就会执行. Djang ...

  7. django之信号

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

  8. Django signals 信号作用及用法说明

    参考:https://docs.djangoproject.com/en/1.11/ref/signals/ 1.Model signals django.db.models.signales 作用于 ...

  9. Django框架---- 信号

    Django中的信号及其用法 Django中提供了"信号调度",用于在框架执行操作时解耦. 一些动作发生的时候,系统会根据信号定义的函数执行相应的操作 Django中内置的sign ...

随机推荐

  1. 对比深度学习十大框架:TensorFlow 并非最好?

    http://www.oschina.net/news/80593/deep-learning-frameworks-a-review-before-finishing-2016 TensorFlow ...

  2. Linux 循环创建多个线程

    这里说一下相关的基础知识: 线程概念 什么是线程 LWP:light weight process 轻量级的进程,本质仍是进程(在Linux环境下)     进程:独立地址空间,拥有PCB     线 ...

  3. 1.Python基础知识小结:

    Python3下载地址:https://www.python.org/downloads/windows/ python3 windows安装参考地址: https://jingyan.baidu.c ...

  4. Who am I?

    陈治宏. 一只想做软件开发,但还在machine learning领域挣扎的计算机汪.

  5. linux 一个跟踪文件删除的小技巧

    最近有同事问我说他有个现场环境,经常会丢失业务文件,每天都出现,几百个里面丢失1到两个. 为了解决这个问题,我让他布置audit,具体可以man一下auditctl. 过了一天,他说audit.log ...

  6. RabbitMQ.Net 应用(1)

    风浪子 概述 MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法.RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统.他遵循Mozilla Pu ...

  7. C#导出Excel,某单元格内容长度超过255 的解决方法

    public static void ToExcel(DataTable dtSource, string strPath, string strSheetName) { System.Data.Ol ...

  8. 吴裕雄 python 机器学习-KNN(2)

    import matplotlib import numpy as np import matplotlib.pyplot as plt from matplotlib.patches import ...

  9. Hadoop分布式HA的安装部署

    Hadoop分布式HA的安装部署 前言 单机版的Hadoop环境只有一个namenode,一般namenode出现问题,整个系统也就无法使用,所以高可用主要指的是namenode的高可用,即存在两个n ...

  10. Oracle11g服务详细介绍

    Oracle11g服务详细介绍及哪些服务是必须开启的? Oracle ORCL VSS Writer Service Oracle卷映射拷贝写入服务,VSS(Volume Shadow Copy Se ...