django的 信号详解编程语言
2023-06-13 09:11:54 时间
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)
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定义的信号,还是我们自定义的信号,我们就可以为一个信号注册多个函数,这些多个函数会按照注册的顺序执行
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/20811.html
cgopython相关文章
- Django Rest Framework源码剖析(八)—–视图与路由详解编程语言
- Django Rest Framework源码剖析(四)—–API版本详解编程语言
- CentOS6设置Django开发环境详解编程语言
- CentOS 6.5下安装Python+Django+Nginx+uWSGI详解编程语言
- Python3:Django根据models生成数据库表时报 __init__() missing 1 required positional argument: ‘on_delete’详解编程语言
- Python3:Django连接Mysql数据库时出错,’Did you install mysqlclient or MySQL-python’详解编程语言
- 服务器上部署django项目流程详解编程语言
- django前后端分离部署详解编程语言
- 非常详细的Django使用Token详解编程语言
- Django Cookie和Session详解编程语言
- Django-用户-组-权限详解编程语言
- django 思维导图详解编程语言
- Nginx+uwsgi+Django环境部署详解编程语言
- Django创建应用一详解编程语言
- stark组件之批量操作【模仿Django的admin】详解编程语言
- Django的Rbac介绍3详解编程语言
- Django的cookie学习详解编程语言
- Django的模板继承详解编程语言
- Django的模板语言介绍详解编程语言