Django在Model保存前记录日志实例
Django中如何在Model保存前做一定的固定操作,比如写一句日志?
关键词:信号
利用Django的Model的SignalDispatcher,通过django.db.models.signals.pre_save()方法,在事件发生前,
发射
触发信号,这一切都被调度中的receiver方法深藏功与名的保存了。
信号的处理一般都写在Model中,举个例子:
importlogging fromdjango.dbimportmodels fromdjango.db.models.signalsimportpre_save fromdjango.dispatchimportreceiver classOrder(models.Model): #... logger=logging.getLogger(__name__) @receiver(pre_save,sender=Order) defpre_save_handler(sender,**kwargs): #我们可以在Order这个Model保存之前尽情调戏了:) logger.debug("{}".format(sender,**kwargs)) print'fuckuniverse'
这样应该就实现了题中的要求,类似的方法还有比如pre_init是在Model实例之前会触发,post_init在实例之后触发,同理就是pre_save和post_save了。
补充知识:Djangomodels.save()的问题
Djangoviews.py引用models.py进行modles.objects.create()然后进行.save的问题。
我们是不能直接进行保存的,提交到数据库里面的。
EX:
我们这里通过post获取到信息后。
views.py
defpost(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默认的,检查是否正确 ifseatform.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
classSeatForm(forms.Form): #注意这里的date和time需要与前端的命名要一直 date=forms.CharField() time=forms.CharField()
通过这样的方法,我们就可以保存到数据库了。
以上这篇Django在Model保存前记录日志实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。