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. wed开发基础--练习题

    一.HTML部分 本小节重点: 熟练使用div+span布局,知道div和span的语义化的意思 熟悉对div.ul.li.span.a.img.table.form.input标签有深刻的认知, 初 ...

  2. FlashDevelop关闭分号自动格式化

    菜单Tools-Program Settings-ASCompletion-Helpers-Characters Requiring Whitespace 清空",;*+-=/%<&g ...

  3. where后一个条件和多个条件的查询速度

    如果记录中有两个都是 唯一标识的  ,那是都where  and 还是只写一个比较快 ---- 一个快

  4. week06 09 NodeJS Server as a RPCclient - jayson

    nodeserver端的rpcclient 来调用后端backendserver端定义的add等方法 2个server连通 Make NodeJs as a client - Npm jayson 用 ...

  5. freemarker取数

    在后端map必须的键值必须是字符串 java.util.Map busVoltagesMap = new java.util.HashMap(); busVoltagesMap.put("1 ...

  6. C++ Custom Control控件 向父窗体发送对应的消息

    向父窗体发送消息 ,这里只讲发送 WM_NOTIFY  消息, 其它消息是相同的 在 控件中的某个函数中 设置发送消息的程序 首先定义一个WM_NOTIFY消息的专用结构. NMHDR nm; nm. ...

  7. Oracle Error

    1. TNS:listener does not currently know of service requested in connect descriptor 数据库连接出错

  8. Python基础学习Day3 数据类型的转换、int、str、bool、字符串的常用方法、for循环

    一.数据类型的转换 常用的是:int 转str.str转int.int转bool 时   非零即为 True . # 数据类型之间转换 ***** # int <--> str str(i ...

  9. 04_web基础(七)之jsp

    39.jsp与el表达式引入 JSP:Java Server Pages:Java的服务网页(Java动态网页):=========================================== ...

  10. java工程师基础笔试题(一)

    一.选择和填空  (不定项哦!) 1,如下是一份文件名为Test2.java的源文件,请问,编译该文件之后会生成几份字节码文件 class Test{ class Inner{} static cla ...