1. 程式人生 > >Django在Model儲存前記錄日誌

Django在Model儲存前記錄日誌

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 了。