django:信号

1.内置信号和自定义信号

链接: 官网链接

当前文件均为某个app下

1.apps.py: 将信号和回调函数绑定

from django.apps import AppConfig
from django.db.models.signals import post_save, post_delete
from django.core.signals import request_finished


class UserConfig(AppConfig):
    default_auto_field = 'django.db.models.BigAutoField'
    name = 'apps.user'

    def ready(self):
        from apps.user.models import User
        from apps.user.signal import post_save_user, post_delete_user, request_finished_all, custom_signal, \
            custom_signal_callback

        post_save.connect(post_save_user, sender=User, weak=False, dispatch_uid='my_unique_identifier')
        post_delete.connect(post_delete_user, sender=User, weak=False, dispatch_uid='my_unique_identifier')
        request_finished.connect(request_finished_all, weak=False, dispatch_uid='my_unique_identifier')
        custom_signal.connect(custom_signal_callback, weak=False, dispatch_uid='my_unique_identifier')  # 自定义的信号

2.signal.py:定义回调函数

from django.dispatch import Signal


def post_save_user(sender, instance, **kwargs):
    print(instance.id)
    pass


def post_delete_user(sender, instance, **kwargs):
    print(instance.id)
    pass


def request_finished_all(sender, **kwargs):
    print(f'当前是request_finished')
    print(kwargs)
    pass


def custom_signal_callback(sender, **kwargs):
    print('自定义的信号')
    pass


custom_signal = Signal(providing_args=['data'])  # 自定义信号

3.views.py:执行

from apps.user.signal import custom_signal

custom_signal.send(sender='test', data={'a': 'aa'})  # 同步执行
custom_signal.send_robust(sender='test', data={'a': 'aa'})  # 同步执行


send() 和 send_robust() 都返回一个元组对列表 [(receiver, response), … ],表示被调用的接收器函数及其响应值的列表。
send() 和 send_robust() 在处理接收器函数所引发异常的方式上有所不同。 send() 不捕获接收器引起的任何异常;它只是允许错误传播。因此,并非所有的接收器都会在出现错误时被通知信号。
send_robust() 捕获从 Python的 Exception 类派生的所有错误,并确保所有接收器都收到信号通知。如果发生错误,将在引发错误的接收器的元组对中返回错误实例。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值