zoukankan      html  css  js  c++  java
  • Signals

    信号:在需要的地方通知receiver某些操作已发生。如调用model的save方法时会发送pre_save(在调用save之前)和post_save,pre_save可以连接一个receiver函数,在函数中做需要的处理。

    django信号文档

    两种方式接收信号

    1.使用connect

    from django.core.signals import request_finished
    
    #request_finished是内置信号
    request_finished.connect(my_callback)

    2.使用装饰器

    from django.core.signals import request_finished
    from django.dispatch import receiver
    
    @receiver(request_finished)
    def my_callback(sender, **kwargs):
        print("Request finished!")

    对信号使用connect,对receiver使用装饰器

    自定义信号

    import django.dispatch
    
    pizza_done = django.dispatch.Signal(providing_args=["toppings", "size"])

    #providing_args为发送信号是需要携带的参数

    发送信号

    Signal.send(sender, **kwargs)[source]
    或者
    Signal.send_robust(sender,
    **kwargs)[source]

    两者都有返回值:
    Both send() and send_robust() return a list of tuple pairs [(receiver, response), ... ], representing the list of called receiver functions and their response values.
    区别:
    send不捕获异常,出现异常不保证能通知到所有receiver,send_robust捕获异常,出现异常可以通知所有receiver,异常会在返回的tuple中

    要有一个sender,空字符串也行

  • 相关阅读:
    Source Insight新建工程文件
    移植3.4.2内核之韦东山笔记
    移植最新u-boot(裁剪和修改默认参数)
    C++与C语言在结构体上的区别
    VIP之Switch
    VIP之CSC
    VIP之Scaler
    VIP之FrameBuffer
    VIP之MixerII
    VIP之Clipper
  • 原文地址:https://www.cnblogs.com/songbird/p/7544511.html
Copyright © 2011-2022 走看看