django 自定义信号 1.11
Posted mingerlcm
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了django 自定义信号 1.11相关的知识,希望对你有一定的参考价值。
django 还支持自定义信号
需要步骤
1. 创建信号
import django.dispatch # 信号名 pizza_done = django.dispatch.Signal(providing_args=["toppings", "size"])
这个信号名相当于 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
后面 ["toppings", "size"] 是触发者传递的两个参数,触发这个信号传递的参数
2.注册信号
注册函数
def callback(sender, **kwargs): print("callback") print(sender,kwargs) pizza_done.connect(callback)
3.触发信号
from 路径 import pizza_done pizza_done.send(sender=‘seven‘,toppings=123, size=456)
实验开始 在django 项目下 创建一个 pg.py 存放自己创建信号的代码 或者 其他目录下
import django.dispatch # 信号名 pizza_done = django.dispatch.Signal(providing_args=["toppings", "size"]) def f1(sender, **kwargs): print("callback") print(sender, kwargs) pizza_done.connect(f1)
urls.py 新添加 test2 url路由关系
from django.conf.urls import url from django.contrib import admin from django.conf.urls import include from app01 import views urlpatterns = [ # url(r‘^admin/‘, admin.site.urls), url(r‘^login/‘, views.login), url(r‘^index/‘, views.index), url(r‘^logout/‘, views.logout), url(r‘^test/‘, views.test), url(r‘^cache/‘, views.cache), url(r‘^signal/‘, views.signal), url(r‘^test2/‘, views.test2), ]
在viwes.py test2函数触发信号
导入pg.py 模块
def test2(request): from pg import pizza_done # 触发信号,要想触发需要加参数 想什么写就什么写 pizza_done.send(sender="asdasda",toppings=123, size=456) print("ok") return HttpResponse("自定义信号")
执行url
后台拿到信息
mike jack tom 小张 小刚 老张 callback asdasda {‘signal‘: <django.dispatch.dispatcher.Signal object at 0x00000000045F1C88>, ‘toppings‘: 123, ‘size‘: 456} ok xiaogang xiaoming peter [07/Jan/2019 18:06:06] "GET /test2/ HTTP/1.1" 200 15
由于内置信号的触发者已经集成到Django中,所以其会自动调用,而对于自定义信号则需要开发者在任意位置触发。
以上是关于django 自定义信号 1.11的主要内容,如果未能解决你的问题,请参考以下文章