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中使用swapCase()方法转换大小写的教程
May 20 Python
python处理二进制数据的方法
Jun 03 Python
Python和C/C++交互的几种方法总结
May 11 Python
Python 12306抢火车票脚本 Python京东抢手机脚本
Feb 06 Python
Python3数据库操作包pymysql的操作方法
Jul 16 Python
使用Python抓取豆瓣影评数据的方法
Oct 17 Python
Python列表常见操作详解(获取,增加,删除,修改,排序等)
Feb 18 Python
Python 分发包中添加额外文件的方法
Aug 16 Python
关于PyTorch 自动求导机制详解
Aug 18 Python
Python爬取破解无线网络wifi密码过程解析
Sep 17 Python
如何使用repr调试python程序
Feb 28 Python
python 监控logcat关键字功能
Sep 04 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实现网站插件机制的方法
2009/11/10 PHP
PHP中使用php5-ffmpeg撷取视频图片实例
2015/01/07 PHP
COM中获取JavaScript数组大小的代码
2009/11/22 Javascript
js实现页面转发功能示例代码
2013/08/05 Javascript
JavaScript中最简洁的编码html字符串的方法
2014/10/11 Javascript
javascript cookie的简单应用
2016/02/24 Javascript
Vuex之理解Store的用法
2017/04/19 Javascript
js实现随机数字字母验证码
2017/06/19 Javascript
Vue+Element使用富文本编辑器的示例代码
2017/08/14 Javascript
JavaScript 完成注册页面表单校验的实例
2017/08/19 Javascript
解决vue2 在mounted函数无法获取prop中的变量问题
2018/11/15 Javascript
Vue+element 解决浏览器自动填充记住的账号密码问题
2019/06/11 Javascript
简单了解Vue + ElementUI后台管理模板
2020/04/07 Javascript
JavaScript React如何修改默认端口号方法详解
2020/07/28 Javascript
python各种语言间时间的转化实现代码
2016/03/23 Python
Python数据分析库pandas基本操作方法
2018/04/08 Python
详谈python在windows中的文件路径问题
2018/04/28 Python
python实现自动网页截图并裁剪图片
2018/07/30 Python
Python中staticmethod和classmethod的作用与区别
2018/10/11 Python
Python企业编码生成系统之主程序模块设计详解
2019/07/26 Python
Python实现代码统计工具
2019/09/19 Python
使用Django搭建一个基金模拟交易系统教程
2019/11/18 Python
自定义Django默认的sitemap站点地图样式
2020/03/04 Python
python 使用raw socket进行TCP SYN扫描实例
2020/05/05 Python
python中sort sorted reverse reversed函数的区别说明
2020/05/11 Python
Tensorflow与Keras自适应使用显存方式
2020/06/22 Python
Python在字符串中处理html和xml的方法
2020/07/31 Python
安纳塔拉酒店度假村及水疗官方网站:Anantara Hotel
2016/08/25 全球购物
阿迪达斯奥地利官方商城:adidas.at
2016/10/16 全球购物
国外软件测试工程师面试题
2016/12/09 面试题
校园摄影活动策划方案
2014/02/05 职场文书
英文版辞职信
2015/02/28 职场文书
导游词之蓬莱长岛
2019/12/17 职场文书
MySQL kill不掉线程的原因
2021/05/07 MySQL
JPA如何使用entityManager执行SQL并指定返回类型
2021/06/15 Java/Android
SpringDataJPA实体类关系映射配置方式
2021/12/06 Java/Android