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之有容乃大的list(2)
Sep 15 Python
python获取mp3文件信息的方法
Jun 15 Python
Python实现对字符串的加密解密方法示例
Apr 29 Python
python 实时得到cpu和内存的使用情况方法
Jun 11 Python
pyqt5与matplotlib的完美结合实例
Jun 21 Python
ORM Django 终端打印 SQL 语句实现解析
Aug 09 Python
Python for循环通过序列索引迭代过程解析
Feb 07 Python
python matplotlib 绘图 和 dpi对应关系详解
Mar 14 Python
解决python对齐错误的方法
Jul 16 Python
Python爬虫爬取微信朋友圈
Aug 06 Python
PyCharm 安装与使用配置教程(windows,mac通用)
May 12 Python
Python可视化神器pyecharts绘制地理图表
Jul 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
资料注册后发信小技巧
2006/10/09 PHP
php curl 登录163邮箱并抓取邮箱好友列表的代码(经测试)
2011/04/07 PHP
PHP引用符&的用法详细解析
2013/08/22 PHP
PHP实现数组转JSon和JSon转数组的方法示例
2018/06/14 PHP
Thinkphp自定义生成缩略图尺寸的方法
2019/08/05 PHP
javascript cookie操作类的实现代码小结附使用方法
2010/06/02 Javascript
服务器端的JavaScript脚本 Node.js 使用入门
2012/03/07 Javascript
javascript 事件处理程序介绍
2012/06/27 Javascript
jQuery contains过滤器实现精确匹配使用方法
2013/04/12 Javascript
JS实现字体选色板实例代码
2013/11/20 Javascript
深入理解JavaScript系列(45):代码复用模式(避免篇)详解
2015/03/04 Javascript
js实现仿网易点击弹出提示同时背景变暗效果
2015/08/13 Javascript
Angularjs验证用户输入的字符串是否为日期时间
2017/06/01 Javascript
JS抛物线动画实例制作
2018/02/24 Javascript
jQuery解析json格式数据示例
2018/09/01 jQuery
vue移动端实现手机左右滑动入场动画
2020/06/17 Javascript
element ui分页多选,翻页记忆的实例
2019/09/03 Javascript
React学习之JSX与react事件实例分析
2020/01/06 Javascript
详解webpack-dev-middleware 源码解读
2020/03/23 Javascript
[05:39]2014DOTA2国际邀请赛 DK晋级胜者组专访战队国士无双
2014/07/14 DOTA
Python使用当前时间、随机数产生一个唯一数字的方法
2017/09/18 Python
详解Python下ftp上传文件linux服务器
2018/06/21 Python
解决csv.writer写入文件有多余的空行问题
2018/07/06 Python
对Python中画图时候的线类型详解
2019/07/07 Python
python GUI库图形界面开发之PyQt5线程类QThread详细使用方法
2020/02/26 Python
HEMA法国:荷兰原创设计
2019/02/21 全球购物
阿联酋优惠券服务:Living Kool
2019/12/12 全球购物
用C#语言写出与SQLSERVER访问时的具体过程
2013/04/16 面试题
编程输出如下图形
2013/11/24 面试题
学子宴答谢词
2014/01/25 职场文书
中秋节祝酒词
2015/08/12 职场文书
《你在为谁工作》心得体会(共8篇)
2016/01/20 职场文书
MySQL 逻辑备份与恢复测试的相关总结
2021/05/14 MySQL
pytorch 如何使用batch训练lstm网络
2021/05/28 Python
JavaScript 数组去重详解
2021/09/15 Javascript
python中tkinter复选框使用操作
2021/11/11 Python