Django在Model保存前记录日志

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_37049050/article/details/81746046

Django中如何在Model保存前做一定的固定操作,比如写一句日志?

关键词: 信号

利用Django的Model的Signal Dispatcher, 通过django.db.models.signals.pre_save() 方法,在事件发生前,

发射

触发信号,这一切都被调度中的receiver方法深藏功与名的保存了。

信号的处理一般都写在Model中,举个例子:

import logging
from django.db import models
from django.db.models.signals import pre_save
from django.dispatch import receiver
 
class Order(models.Model):
    # ...
 
 
logger = logging.getLogger(__name__)
 
@receiver(pre_save, sender=Order)
def pre_save_handler(sender, **kwargs):
    
    # 我们可以在Order这个Model保存之前尽情调戏了:)
    logger.debug("{}".format(sender, **kwargs))
    print 'fuck universe'

这样应该就实现了题中的要求,类似的方法还有比如 pre_init 是在Model实例之前会触发, post_init 在实例之后触发,同理就是 pre_save 和 post_save 了。

猜你喜欢

转载自blog.csdn.net/qq_37049050/article/details/81746046