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


Posted in Python onMay 14, 2020

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

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

以上这篇Django在Model保存前记录日志实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
介绍Python的Django框架中的QuerySets
Apr 20 Python
Python实现Sqlite将字段当做索引进行查询的方法
Jul 21 Python
Python中创建字典的几种方法总结(推荐)
Apr 27 Python
Python中用post、get方式提交数据的方法示例
Sep 22 Python
python3下使用cv2.imwrite存储带有中文路径图片的方法
May 10 Python
Python简单实现网页内容抓取功能示例
Jun 07 Python
PyQt5内嵌浏览器注入JavaScript脚本实现自动化操作的代码实例
Feb 13 Python
Django中在xadmin中集成DjangoUeditor过程详解
Jul 24 Python
Python 内置函数globals()和locals()对比详解
Dec 23 Python
如何使用Python处理HDF格式数据及可视化问题
Jun 24 Python
python使用selenium爬虫知乎的方法示例
Oct 28 Python
Python3.9.1中使用split()的处理方法(推荐)
Feb 07 Python
django 连接数据库出现1045错误的解决方式
May 14 #Python
Django ORM filter() 的运用详解
May 14 #Python
Django设置Postgresql的操作
May 14 #Python
numpy矩阵数值太多不能全部显示的解决
May 14 #Python
使用python采集Excel表中某一格数据
May 14 #Python
django 模版关闭转义方式
May 14 #Python
Django表单提交后实现获取相同name的不同value值
May 14 #Python
You might like
PHP正确配置mysql(apache环境)
2011/08/28 PHP
解析php通过cookies获取远程网页的指定代码
2013/06/25 PHP
PHP遍历并打印指定目录下所有文件实例
2014/02/10 PHP
PHP中date与gmdate的区别及默认时区设置
2014/05/12 PHP
JavaScript下申明对象的几种方法小结
2008/10/02 Javascript
jquery的颜色选择插件实例代码
2008/10/02 Javascript
JavaScript 空位补零实现代码
2010/02/26 Javascript
面向对象的Javascript之二(接口实现介绍)
2012/01/27 Javascript
JS图片预加载 JS实现图片预加载应用
2012/12/03 Javascript
jquery组件使用中遇到的问题整理及解决
2014/02/21 Javascript
用JavaScript来美化HTML的select标签的下拉列表效果
2015/11/17 Javascript
js获取隐藏元素宽高的实现方法
2016/05/19 Javascript
js实现上下左右弹框划出效果
2017/03/08 Javascript
nodejs之get/post请求的几种方式小结
2017/07/26 NodeJs
JS实现的加减乘除四则运算计算器示例
2017/08/09 Javascript
微信小程序中使用ECharts 异步加载数据实现图表功能
2018/07/13 Javascript
layui实现图片虚拟路径上传,预览和删除的例子
2019/09/25 Javascript
vue中watch和computed为什么能监听到数据的改变以及不同之处
2019/12/27 Javascript
vue移动端使用canvas签名的实现
2020/01/15 Javascript
js实现扫雷源代码
2020/11/27 Javascript
[00:35]2016完美“圣”典风云人物:冷冷宣传片
2016/12/08 DOTA
python里将list中元素依次向前移动一位
2014/09/12 Python
Python使用pydub库对mp3与wav格式进行互转的方法
2019/01/10 Python
对python中各个response的使用说明
2020/03/28 Python
Python urllib2运行过程原理解析
2020/06/04 Python
用pandas划分数据集实现训练集和测试集
2020/07/20 Python
Python pathlib模块使用方法及实例解析
2020/10/05 Python
可自定义箭头样式的CSS3气泡提示框
2016/03/16 HTML / CSS
回门宴父母答谢词
2014/01/26 职场文书
新春文艺演出主持词
2014/03/27 职场文书
法学专业毕业生自荐信
2014/06/11 职场文书
计算机相关专业自荐信
2014/07/02 职场文书
个人收入证明模板
2014/09/18 职场文书
会议通知范文
2015/04/15 职场文书
2015年信息宣传工作总结
2015/05/26 职场文书
vue.js 使用原生js实现轮播图
2022/04/26 Vue.js