歡迎您光臨本站 註冊首頁

Django在Model保存前記錄日誌實例

←手機掃碼閱讀     hongdian2012 @ 2020-06-04 , reply:0

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

補充知識:Django models.save()的問題

Django views.py 引用models.py進行modles.objects.create()然後進行.save的問題。

我們是不能直接進行保存的,提交到數據庫裡面的。

EX:

我們這裡通過post獲取到信息後。

views.py

 def post(self, request, ab=None, all_seat=None): # 獲取用戶信息 date = request.POST.get('date') time = request.POST.get('time')


然後

views.py

 seatform = SeatForm(request.POST) # 提交給數據庫 #這裡的is_valid()是Django默認的,檢查是否正確 if seatform.is_valid(): # 這裡向數據庫新增一條信息,然後保存 getSeat = Seat.objects.create(dateTime=date, classtime=time, status='0', user=name, number=label) getSeat.save()


上面的SeatForm()是我們在與views.py同級目錄下創建的forms.py

forms.py

 class SeatForm(forms.Form): #注意這裡的date和time需要與前端的命名要一直 date = forms.CharField() time = forms.CharField()


通過這樣的方法,我們就可以保存到數據庫了。


[hongdian2012 ] Django在Model保存前記錄日誌實例已經有237次圍觀

http://coctec.com/docs/python/shhow-post-236939.html