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检测远程服务器tcp端口的方法
Mar 14 Python
在Python中操作文件之seek()方法的使用教程
May 24 Python
Python使用Turtle模块绘制五星红旗代码示例
Dec 11 Python
python中yaml配置文件模块的使用详解
Apr 27 Python
解决Python下json.loads()中文字符出错的问题
Dec 19 Python
Falsk 与 Django 过滤器的使用与区别详解
Jun 04 Python
Python中新式类与经典类的区别详析
Jul 10 Python
python实现将列表中各个值快速赋值给多个变量
Apr 02 Python
python将unicode和str互相转化的实现
May 11 Python
如何在keras中添加自己的优化器(如adam等)
Jun 19 Python
使用Pytorch实现two-head(多输出)模型的操作
May 28 Python
Python用any()函数检查字符串中的字母以及如何使用all()函数
Apr 14 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边学边教》(02.Apache+PHP环境配置――下篇)
2006/12/13 PHP
PHP迭代器实现斐波纳契数列的函数
2013/11/12 PHP
PHP后期静态绑定之self::限制实例分析
2018/12/21 PHP
PHP levenshtein()函数用法讲解
2019/03/08 PHP
php扩展开发入门demo示例
2019/09/23 PHP
再谈Yii Framework框架中的事件event原理与应用
2020/04/07 PHP
php7 新增功能实例总结
2020/05/25 PHP
深入分析PHP设计模式
2020/06/15 PHP
javascript 跨浏览器开发经验总结(五) js 事件
2010/05/19 Javascript
从jQuery.camelCase()学习string.replace() 函数学习
2011/09/13 Javascript
纯js写的分页表格数据为json串
2014/02/18 Javascript
JavaScript操作Cookie方法实例分析
2015/05/27 Javascript
JS设置CSS样式的方式汇总
2017/01/21 Javascript
js的OOP继承实现(必看篇)
2017/02/18 Javascript
js实现4个方向滚动的球
2017/03/06 Javascript
基于JS实现仿京东搜索栏随滑动透明度渐变效果
2017/07/10 Javascript
JS使用iView的Dropdown实现一个右键菜单
2019/05/06 Javascript
详解Vue中组件传值的多重实现方式
2019/08/16 Javascript
VsCode与Node.js知识点详解
2019/09/05 Javascript
Node.js API详解之 querystring用法实例分析
2020/04/29 Javascript
js实现纯前端压缩图片
2020/11/16 Javascript
微信小程序实现通讯录列表展开收起
2020/11/18 Javascript
[59:15]EG vs LGD 2018国际邀请赛淘汰赛BO3 第一场 8.26
2018/08/29 DOTA
[00:56]跨越时空加入战场 全新祈求者身心“失落奇艺侍祭”展示
2019/07/20 DOTA
[52:05]EG vs OG 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
python编程实现随机生成多个椭圆实例代码
2018/01/03 Python
详解Python 定时框架 Apscheduler原理及安装过程
2019/06/14 Python
惠普香港官方商店:HP香港
2019/04/30 全球购物
澳大利亚购买健身器材网站:Gym Direct
2019/12/19 全球购物
公司合作意向书
2014/04/01 职场文书
家长对学生的评语
2014/04/18 职场文书
文体活动总结范文
2014/05/05 职场文书
新农村建设标语
2014/06/24 职场文书
走进敬老院活动总结
2014/07/10 职场文书
2014年防汛工作总结
2014/12/08 职场文书
护士岗位竞聘书
2015/09/15 职场文书