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 相关文章推荐
使用python3.5仿微软记事本notepad
Jun 15 Python
python用户管理系统的实例讲解
Dec 23 Python
Django Rest framework之权限的实现示例
Dec 17 Python
django-初始配置(纯手写)详解
Jul 30 Python
简单了解python中的与或非运算
Sep 18 Python
python 字典的打印实现
Sep 26 Python
python自动化实现登录获取图片验证码功能
Nov 20 Python
Django高并发负载均衡实现原理详解
Apr 04 Python
Pycharm中安装wordcloud等库失败问题及终端通过pip安装的Python库如何添加到Pycharm解释器中(推荐)
May 10 Python
Python Dict找出value大于某值或key大于某值的所有项方式
Jun 05 Python
Python map及filter函数使用方法解析
Aug 06 Python
Python如何把字典写入到CSV文件的方法示例
Aug 23 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中设置index.php文件为只读的方法
2013/02/06 PHP
php中通过数组进行高效随机抽取指定条记录的算法
2013/09/09 PHP
php cookie使用方法学习笔记分享
2013/11/07 PHP
JavaScript For Beginners(转载)
2007/01/05 Javascript
javascript function、指针及内置对象
2009/02/19 Javascript
基于Jquery的$.cookie()实现跨越页面tabs导航实现代码
2011/03/03 Javascript
Jquery时间验证和转换工具小例子
2013/07/01 Javascript
js 获取元素下面所有li的两种方法
2014/04/14 Javascript
js实现二代身份证号码验证详解
2014/11/20 Javascript
jquery实现二级导航下拉菜单效果
2015/12/18 Javascript
Vue获取DOM元素样式和样式更改示例
2017/03/07 Javascript
Vue循环组件加validate多表单验证的实例
2018/09/18 Javascript
Vue.js 事件修饰符的使用教程
2018/11/01 Javascript
vue实现Input输入框模糊查询方法
2021/01/29 Javascript
JavaScript制作3D旋转相册
2020/08/02 Javascript
[56:00]DOTA2上海特级锦标赛主赛事日 - 4 胜者组决赛Secret VS Liquid第一局
2016/03/05 DOTA
[00:37]食人魔魔法师轮盘吉兆顺应全新至宝将拥有额外款式
2019/12/19 DOTA
王纯业的Python学习笔记 下载
2007/02/10 Python
Python 专题二 条件语句和循环语句的基础知识
2017/03/19 Python
python下10个简单实例代码
2017/11/15 Python
Python模块文件结构代码详解
2018/02/03 Python
python执行系统命令后获取返回值的几种方式集合
2018/05/12 Python
Python开发最牛逼的IDE——pycharm
2018/08/01 Python
详解numpy的argmax的具体使用
2019/05/27 Python
django中SMTP发送邮件配置详解
2019/07/19 Python
matplotlib之pyplot模块之标题(title()和suptitle())
2021/02/22 Python
HTML5 Canvas如何实现纹理填充与描边(Fill And Stroke)
2013/07/15 HTML / CSS
北美最大的手工艺品零售商之一:Michaels Stores
2019/02/27 全球购物
俄罗斯最大的在线手表商店:Bestwatch.ru
2020/01/11 全球购物
简述进程的启动、终止的方式以及如何进行进程的查看
2013/07/12 面试题
企业内部培训方案
2014/02/04 职场文书
求职教师自荐书
2014/06/19 职场文书
赵乐秦在党的群众路线教育实践活动总结大会上的讲话稿
2014/10/25 职场文书
大学生入党自我鉴定范文
2019/06/21 职场文书
Go Plugins插件的实现方式
2021/08/07 Golang
【海涛dota解说】一房久违的影魔魂守二连发
2022/04/01 DOTA