zl程序教程

您现在的位置是:首页 >  后端

当前栏目

django的 信号详解编程语言

django编程语言 详解 信号
2023-06-13 09:11:54 时间

django的 信号详解编程语言

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

django的 信号详解编程语言

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) 


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 


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

3、效果如下

django的 信号详解编程语言

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

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/20811.html

cgopython