Django在Model儲存前記錄日誌
阿新 • • 發佈:2019-02-10
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
了。