Django在Model保存前记录日志实例

作者:喝完这杯还有一箱 时间:2023-10-05 03:01:29 

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()

通过这样的方法,我们就可以保存到数据库了。

来源:https://blog.csdn.net/qq_37049050/article/details/81746046

标签:Django,Model,日志
0
投稿

猜你喜欢

  • MySQL触发器trigger的使用

    2024-01-23 15:08:23
  • MySQL实现分词搜索(FULLTEXT)的方法

    2024-01-22 17:47:40
  • javascript this 关键字小提示

    2009-02-03 13:22:00
  • python快速编写单行注释多行注释的方法

    2022-06-04 07:06:54
  • python实现日历效果

    2022-07-20 22:22:57
  • go for range遍历二维数组的示例

    2024-04-25 15:27:01
  • Python+Tkinter制作猜灯谜小游戏

    2021-09-24 19:43:17
  • Python3.9.1中使用split()的处理方法(推荐)

    2022-04-17 23:16:12
  • ASP技巧:Script块不能放在另一个Script 块内

    2009-08-19 17:17:00
  • Spring Batch读取txt文件并写入数据库的方法教程

    2024-01-27 03:59:32
  • MySQL获得当前日期时间函数示例详解

    2024-01-27 07:54:48
  • Python实现批量识别图片文字并存为Excel

    2021-07-28 06:34:23
  • Python3实现打格点算法的GPU加速实例详解

    2022-05-26 23:20:30
  • python字符串连接方式汇总

    2021-08-19 23:46:14
  • Golang中Set类型的实现方法示例详解

    2024-02-13 23:45:11
  • spyder快捷键与python符号化输出方式

    2023-08-23 11:58:24
  • Mysql数据库使用concat函数执行SQL注入查询

    2024-01-18 04:55:35
  • 深入探寻javascript定时器

    2024-04-29 13:36:55
  • Python制作动态字符画的源码

    2022-11-18 09:13:48
  • uniapp H5 https跨域请求实现

    2024-04-10 16:20:27
  • asp之家 网络编程 m.aspxhome.com