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,空字符串也行

  • 相关阅读:
    JSON.parse与eval
    加密算法
    asp.net权限管理
    asp.net登录状态验证
    U3D Debug.log的问题
    yield(C# 参考)
    U3D 动态创建Prefab的多个实例
    U3D事件系统总结
    C#事件与接口
    C#泛型委托,匿名方法,匿名类
  • 原文地址:https://www.cnblogs.com/songbird/p/7544511.html
Copyright © 2011-2022 走看看