Django在Model保存前記錄日志實例
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進行modles.objects.create()然后進行.save的問題。
我們是不能直接進行保存的,提交到數(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默認的,檢查是否正確 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ù)庫了。
以上這篇Django在Model保存前記錄日志實例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
PyTorch 導(dǎo)數(shù)應(yīng)用的使用教程
這篇文章主要介紹了PyTorch 導(dǎo)數(shù)應(yīng)用的使用教程,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08python?sklearn?畫出決策樹并保存為PDF的實現(xiàn)過程
這篇文章主要介紹了python?sklearn?畫出決策樹并保存為PDF的實現(xiàn)過程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-07-07Django防御csrf攻擊的實現(xiàn)方式(包括ajax請求)
這篇文章主要介紹了Django防御csrf攻擊的實現(xiàn)方式(包括ajax請求),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-09-09部署django項目安裝uwsgi出錯的解決方法總結(jié)
uwsgi協(xié)議是一個uWSGI服務(wù)器自有的協(xié)議,它用于定義傳輸信息的類型(type of information),每一個uwsgi packet前4byte為傳輸信息類型描述,它與WSGI相比是兩樣?xùn)|西,下面這篇文章主要給大家介紹了關(guān)于部署django項目安裝uwsgi出錯的解決方法,需要的朋友可以參考下2022-08-08使用python創(chuàng)建生成動態(tài)鏈接庫dll的方法
這篇文章主要介紹了使用python創(chuàng)建生成動態(tài)鏈接庫dll的方法,本文通過示例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-05-05