就像此时此刻的心情,不言而喻。。。
在app目录下创建信号文件signal_processor
from .dingtalk import send
from .models import Candidate
from .tasks import send_message
from django.contrib import messages
from django.dispatch import receiver
# @receiver(signal=pre_delete, sender=Candidate, dispatch_uid="pre_delete_notify_callback")
# @receiver(signal=post_delete, sender=Candidate, dispatch_uid="post_delete_notify_callback")
def notify_callback(sender, instance=None, created=False, **kwargs):
candidates = ''
interviewers = ''
phone = []
candidates = instance.username + ';' + candidates
interviewers = instance.first_interviewer_user.username + ';' + interviewers
phone.append(int(instance.first_interviewer_user.account_phone))
send(' %s 是个大笨蛋,红颜与否,英才也罢,命皆为定数,都怪 %s ,都怪他!' % (candidates, interviewers), phone)
logger.info(candidates)
post_delete.connect(notify_callback, sender=Candidate, dispatch_uid="post_delete_notify_callback")
# from ..jobs.models import Resume
#
#
# def notify_callback(sender, instance=None, using=None, **kwargs):
# dict_obj = model_to_dict(instance, exclude=("picture", "attachment"))
# message = "Instance of %s has been deleted: %s" %(type(instance), json.dumps(dict_obj, ensure_ascii=False))
# send(message)
#
#
# post_delete.connect(notify_callback, sender=Resume, dispatch_uid="post_delete_notify_callback")
这边记录了两种方式,装饰器方式为注释的那个。
常见的signal方式见文档
eg。
Django内置了一整套信号,下面是一些比较常用的:
- django.db.models.signals.pre_save & django.db.models.signals.post_save
post_save在ORM模型的save()方法调用之前或之后发送信号
- django.db.models.signals.pre_delete & django.db.models.signals.post_delete
post_delete在ORM模型或查询集的delete()方法调用之前或之后发送信号。
- django.db.models.signals.m2m_changed
m2m_changed当多对多字段被修改时发送信号。
- django.core.signals.request_started & django.core.signals.request_finished
request_finished当接收和关闭HTTP请求时发送信号。
而后记得在apps.py文件中覆盖ready方法,否则不会生效
from django.apps import AppConfig
class InterviewConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'interview'
def ready(self):
from .signal_processor import notify_callback
扩展内容:定义一个自定义信号!