django 信号发送和自定义信号处理
框架使用
from django.dispatch import Signal, receiver
# init
order_done = Signal(providing_args=["order_id", "type"])
# receiver
@receiver(order_done)
def order_done_receiver(sender, **kwargs):
print('order done with order_id: {} and type: {}'.format(kwargs["order_id"],kwargs["type"]))
# send
order_done.send(sender=None, order_id=int(time.time()), type="card")
自定义信号
from django.dispatch import Signal, receiver
# init
order_done = Signal(providing_args=["order_id", "type"])
# receiver
def order_done_receiver(sender, **kwargs):
print('order done with order_id: {} and type: {}'.format(kwargs["order_id"],kwargs["type"]))
# register
order_done.connect(order_done_receiver)
# send
order_done.send(sender=None, order_id=int(time.time()), type="card")
信号的前置 后置操作
from django.db import models
class Warehouse(models.Model):
name = models.CharField(max_length=255)
total_products = models.PositiveIntegerField(default=0)
def __str__(self):
return self.name
class Product(models.Model):
name = models.CharField(max_length=255)
quantity = models.PositiveIntegerField(default=0)
warehouse = models.ForeignKey(Warehouse, on_delete=models.CASCADE, related_name="products")
def __str__(self):
return self.name
from django.db.models.signals import pre_save, post_save
from django.dispatch import receiver
@receiver(pre_save, sender=Product)
def update_total_products(sender, instance, **kwargs):
if instance.pk:
old_quantity = Product.objects.get(pk=instance.pk).quantity
difference = instance.quantity - old_quantity
else:
difference = instance.quantity
instance.warehouse.total_products += difference
instance.warehouse.save()
@receiver(post_save, sender=Product)
def send_low_stock_notification(sender, instance, **kwargs):
low_stock_threshold = 10
if instance.quantity < low_stock_threshold:
logger.warning('warehouse is full!')
本文来自博客园,作者:vx_guanchaoguo0,转载请注明原文链接:https://www.cnblogs.com/guanchaoguo/p/18888553

浙公网安备 33010602011771号