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实现运行其他程序的四种方式实例分析
Aug 17 Python
解析Python中的eval()、exec()及其相关函数
Dec 20 Python
Python调用C语言的方法【基于ctypes模块】
Jan 22 Python
解决python报错MemoryError的问题
Jun 26 Python
selenium python 实现基本自动化测试的示例代码
Feb 25 Python
selenium中get_cookies()和add_cookie()的用法详解
Jan 06 Python
pymysql的简单封装代码实例
Jan 08 Python
经验丰富程序员才知道的8种高级Python技巧
Jul 27 Python
Python中return函数返回值实例用法
Nov 19 Python
python3中数组逆序输出方法
Dec 01 Python
基于Python的接口自动化unittest测试框架和ddt数据驱动详解
Jan 27 Python
Django如何与Ajax交互
Apr 29 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 5.2.14+fpm+memcached(具体操作详解)
2013/06/18 PHP
30个php操作redis常用方法代码例子
2014/07/05 PHP
php中smarty模板条件判断用法实例
2015/06/11 PHP
学习php设计模式 php实现合成模式(composite)
2015/12/08 PHP
PHP设计模式之模板模式定义与用法详解
2018/12/20 PHP
TP5(thinkPHP5框架)基于bootstrap实现的单图上传插件用法示例
2019/05/29 PHP
Javascript 不能释放内存.
2006/09/07 Javascript
多种方式实现JS调用后台方法进行数据交互
2013/08/20 Javascript
window.location 对象所包含的属性
2014/10/10 Javascript
js判断浏览器类型及设备(移动页面开发)
2015/07/30 Javascript
基于JavaScript实现动态添加删除表格的行
2016/02/01 Javascript
深入理解js函数的作用域与this指向
2016/05/28 Javascript
jQuery实现选中行变色效果(实例讲解)
2017/07/06 jQuery
Angular4学习笔记之新建项目的方法
2017/07/18 Javascript
对于js垃圾回收机制的理解
2017/09/14 Javascript
微信小程序实现列表下拉刷新上拉加载
2020/07/29 Javascript
vue中实现先请求数据再渲染dom分享
2018/03/17 Javascript
vue如何安装使用Quill富文本编辑器
2018/09/21 Javascript
vue移动端模态框(可传参)的实现
2019/11/20 Javascript
vue $mount 和 el的区别说明
2020/09/11 Javascript
浅析Python中的多重继承
2015/04/28 Python
Python中定时任务框架APScheduler的快速入门指南
2017/07/06 Python
使用Python的turtle模块画图的方法
2017/11/15 Python
利用numpy实现一、二维数组的拼接简单代码示例
2017/12/15 Python
python绘制漏斗图步骤详解
2019/03/04 Python
Python TestCase中的断言方法介绍
2019/05/02 Python
区分python中的进程与线程
2020/08/13 Python
英国汽车座椅和婴儿车购物网站:Uber Kids
2017/04/19 全球购物
蒂娜商店:Tiina the Store
2019/12/07 全球购物
《满井游记》教学反思
2014/02/26 职场文书
教师竞聘演讲稿
2014/05/16 职场文书
2014中考励志标语
2014/06/05 职场文书
初中成绩单评语
2014/12/29 职场文书
地方课程教学计划
2015/01/19 职场文书
普宁寺导游词
2015/02/04 职场文书
如何利用python创作字符画
2022/06/25 Python