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 获取网页编码方式实现代码
Mar 11 Python
分享几道你可能遇到的python面试题
Jul 24 Python
Python数据分析之如何利用pandas查询数据示例代码
Sep 01 Python
Python爬虫爬取一个网页上的图片地址实例代码
Jan 16 Python
Python实现爬虫从网络上下载文档的实例代码
Jun 13 Python
python 定时器,实现每天凌晨3点执行的方法
Feb 20 Python
Python实现微信小程序支付功能
Jul 25 Python
Mac 使用python3的matplot画图不显示的解决
Nov 23 Python
python图形开发GUI库wxpython使用方法详解
Feb 14 Python
python多维数组分位数的求取方式
Mar 03 Python
Python docutils文档编译过程方法解析
Jun 23 Python
一文带你了解Python 四种常见基础爬虫方法介绍
Dec 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
ajax缓存问题解决途径
2006/12/06 PHP
一个典型的PHP分页实例代码分享
2011/07/28 PHP
CodeIgniter启用缓存和清除缓存的方法
2014/06/12 PHP
ThinkPHP框架分布式数据库连接方法详解
2017/03/14 PHP
背景音乐每次刷新都可以自动更换
2007/02/01 Javascript
jquery实现textarea输入字符控制(仿微博输入控制字符)
2013/04/26 Javascript
showModelDialog弹出文件下载窗口的使用示例
2013/11/19 Javascript
node.js使用nodemailer发送邮件实例
2014/03/10 Javascript
基于jquery实现鼠标左右拖动滑块滑动附源码下载
2015/12/23 Javascript
JavaScript的Backbone.js框架环境搭建及Hellow world示例
2016/05/07 Javascript
React学习笔记之列表渲染示例详解
2017/08/22 Javascript
React通过父组件传递类名给子组件的实现方法
2017/11/13 Javascript
JavaScript实现多重继承的方法分析
2018/01/09 Javascript
iview的table组件自带的过滤器实现
2019/07/12 Javascript
vue实现滑动切换效果(仅在手机模式下可用)
2020/06/29 Javascript
layer弹出层自适应高度,垂直水平居中的实现
2019/09/16 Javascript
基于Element的组件改造的树形选择器(树形下拉框)
2020/02/27 Javascript
[00:32]2018DOTA2亚洲邀请赛Liquid出场
2018/04/03 DOTA
Python中super的用法实例
2015/05/28 Python
Python中的默认参数详解
2015/06/24 Python
Python中*args和**kwargs的区别详解
2019/09/17 Python
python子线程退出及线程退出控制的代码
2019/10/16 Python
css3模拟jq点击事件的实例代码
2017/07/06 HTML / CSS
全球才华横溢工匠的家居装饰、珠宝和礼物:NOVICA
2021/01/22 全球购物
PHP如何设置和取得Cookie值
2015/06/30 面试题
J2EE相关知识面试题
2013/08/26 面试题
业务员简历自我评价
2014/03/06 职场文书
2014年中秋节活动总结
2014/08/29 职场文书
企业法人代表证明书
2014/09/27 职场文书
幼儿园感恩节活动方案
2014/10/06 职场文书
好好学习保证书
2015/02/26 职场文书
教师读书笔记
2015/06/29 职场文书
小学校本教研总结
2015/08/13 职场文书
MySQL 使用索引扫描进行排序
2021/06/20 MySQL
JAVA SpringMVC实现自定义拦截器
2022/03/16 Python
SpringBoot前端后端分离之Nginx服务器下载安装过程
2022/08/14 Servers