码迷,mamicode.com
首页 > 其他好文 > 详细

django 自定义信号 1.11

时间:2019-01-07 21:17:29      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:conf   alt   pre   class   注册   started   logo   自动调用   rgs   

 

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

标签:conf   alt   pre   class   注册   started   logo   自动调用   rgs   

原文地址:https://www.cnblogs.com/mingerlcm/p/10234770.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!