溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Django怎么在Model保存前記錄日志

發(fā)布時間:2020-07-27 11:40:25 來源:億速云 閱讀:132 作者:小豬 欄目:開發(fā)技術(shù)

這篇文章主要為大家展示了Django怎么在Model保存前記錄日志,內(nèi)容簡而易懂,希望大家可以學(xué)習(xí)一下,學(xué)習(xí)完之后肯定會有收獲的,下面讓小編帶大家一起來看看吧。

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

關(guān)鍵詞: 信號

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

發(fā)射

觸發(fā)信號,這一切都被調(diào)度中的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保存之前盡情調(diào)戲了:)
  logger.debug("{}".format(sender, **kwargs))
  print 'fuck universe'

這樣應(yīng)該就實現(xiàn)了題中的要求,類似的方法還有比如 pre_init 是在Model實例之前會觸發(fā), post_init 在實例之后觸發(fā),同理就是 pre_save 和 post_save 了。

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

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

我們是不能直接進(jìn)行保存的,提交到數(shù)據(jù)庫里面的。

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)
          # 提交給數(shù)據(jù)庫
          #這里的is_valid()是Django默認(rèn)的,檢查是否正確
        if seatform.is_valid():
          # 這里向數(shù)據(jù)庫新增一條信息,然后保存
          getSeat = Seat.objects.create(dateTime=date, classtime=time, status='0', user=name, number=label)
          getSeat.save()

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

forms.py

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

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

以上就是關(guān)于Django怎么在Model保存前記錄日志的內(nèi)容,如果你們有學(xué)習(xí)到知識或者技能,可以把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI