Django信号

2018-09-18 06:43:48来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

django——signal

其实可以理解为django内部的钩子,当某一个事件发生时,其它程序会触发并对其作出相关反应,通过signal回调处理函数(receivers),从而更大程度的解耦我们的项目

 

  • 导入类库
     1 from django.shortcuts import render
     2 from django.http import HttpResponse
     3 from django.core.signals import request_finished,request_started,got_request_exception
     4 from django.dispatch import receiver
     5 from django.dispatch.dispatcher import Signal
     6 from django.db.models import signals
     7 from django.db.models.signals import pre_save,pre_delete
     8 from django.db.models.base import Model
     9 import django.dispatch
    10 from app.models import SomeModel

     

  • Django内置信号

 

1 @receiver(request_started)
2 def requeststarted(sender,**kwargs):
3     print(sender,'这是request_started')
4 request_started.connect(requeststarted)#请求完成信号
  • 内置信号触发方式
    • 先定义信号激活时要触发的函数,然后用 信号类型名.connect(函数名),即可达到与第二种装饰器方法相同的效果
    • 一个receiver装饰器,里面第一个参数放信号的类型,第二个参数放附加参数,然后装饰信号激活时要触发的函数

      1 @receiver(pre_save)    #model保存信号
      2 def presave(sender,**kwargs):
      3     print(sender,'这是pre_save')
      4 
      5 @receiver(pre_delete)    #model删除信号
      6 def predelete(sender,**kwargs):
      7     print(sender,'这是pre_delete')
  • 自定义信号

没有内置这种信号,用户可自定义,与内置信号使用的第一种方法相同

1 bus_comming = django.dispatch.Signal(providing_args=['plate_numbers'])
2 
3 def callback(sender,**kwargs):
4     print(sender,kwargs,'这是自定义信号')
5 
6 bus_comming.connect(callback)
7 bus_comming.send(sender='lijingbo',plate_numbers=666)

 

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:PyQt5--Buttons

下一篇:IO多路复用丶基于IO多路复用+socket实现并发请求丶协程