django-生成详细的操作日志
django-生成详细的操作日志
需求:
当用户登录系统,修改表单中的值后,要生成详细的操作日志:
1.联系人由”张三”变为”李四”,联系电话由”AAA”变为”BBB”
2.联系地址由”某区某街道”变为”D区B街道”,联系电话由”AAA”变为”BBB”
思路
1.像 联系人、联系电话、联系地址… 这些数据可以从django model的verbose_name属性获取(在您设置了此属性值的情况下)。
2.由”旧数据”变为”新数据”,需要做新旧数据的对比,即遍历旧的model实例对象与新的model实例对象中的各字段一一对比。
代码实现
1.建立model
在models.py 文件中创建以下两个model:
#!/usr/bin/env python
# -*- coding: utf-8 -*-from __future__ import unicode_literals
from django.db import modelsclass Test(models.Model):"""测试model"""province = models.CharField(max_length=32, null=True, blank=True, verbose_name="省")city = models.CharField(max_length=32, null=True, blank=True, verbose_name="市")address = models.CharField(max_length=100, null=True, blank=True, verbose_name="详细地址")name = models.CharField(max_length=150, null=True, blank=True, verbose_name="名称")def __str__(self):return self.ktv_nameclass OperationLogs(models.Model):"""操作日志"""type = models.CharField(default="ktv", max_length=64, verbose_name="类型") # 可根据model名称等...根据各自的需求做此字段的取舍content = models.TextField(verbose_name="修改详情", null=True)
2.编写日志生成函数
在views下创建operationlogs.py文件:
#!/usr/bin/env python
# -*- coding: utf-8 -*-from myapp.models import OperationLogs
from datetime import datetimedef operationlogs(object_old_model, dict_update_fields, type, msg=None):"""操作日志:param object_old_model: 旧的model对象实例:param dict_update_fields: 更新的字段键值对--字典格式:param type: 类型 (自己定义):param msg: 自定义日志内容 (如果日志格式非‘A由aa变为bb’,可使用此参数):return:"""content = ''if object_old_model is not None and dict_update_fields is not None:fielddic = getmodelfield(object_old_model)for key, val in dict_update_fields.items():if isinstance(val, dict): # 获取外键表的字段值_model = getattr(object_old_model, key)for _key, _val in val.items(): # key->外键名if _key == "id": # 主键id不参与对比passelse:if not _model: # 如果原值为null,做单独处理_rtn = '"%s"由""变为"%s";' % (fielddic[key], _val)else: # 如果原值不为null,调用对比函数处理_rtn = compare(getattr(_model, _key), _val, fielddic[key], msg)content = content + _rtnelse:_rtn = compare(getattr(object_old_model, key), val, fielddic[key], msg)content = content + _rtnelse:content = msg# 存储日志if content == '':passelse:obj_operationlogs = OperationLogs()obj_operationlogs.content = contentobj_operationlogs.type = typeobj_operationlogs.save()def getmodelfield(modelname):"""获取model 指定字段的 verbose_name属性值"""fielddic={}for field in modelname._meta.fields:fielddic[field.name] = field.verbose_namereturn (fielddic)def compare(oldstr, newstr, field, msg):"""生成操作日志详细记录:param oldstr: 原值:param newstr: 新值:param field: 目标字段:return: content"""content = ''if isinstance(newstr, list): # 将list转为str类型,list对象存储到数据库后,为str类型newstr = str(newstr)if oldstr == newstr: # 值未变化,不做处理passelse:if not msg:content = ('"%s"由"%s"变为"%s";' % (field, oldstr, newstr))else:content = ('%s"%s"由"%s"变为"%s";' % (msg, field, oldstr, newstr))return content
3.调用生成日志函数,产生日志
在需要生成日志的view方法中添加:
#!/usr/bin/env python
# -*- coding: utf-8 -*-from myapp.models import Test
import copy def mypatch(request):...datas = request.PATCHtest = Test.objects.filter(id=datas["id"]).first()if test is not None:obj_old_test = copy.deepcopy(test) # 生成操作日志使用update_fields = {"name": datas["name"]...}...operationlogs(obj_old_test, update_fields, "testlogs") # 操作日志...
django-生成详细的操作日志相关推荐
- 【实践】万字干货:如何优雅地记录操作日志?(附代码)
猜你喜欢 1.如何搭建一套个性化推荐系统? 2.从零开始搭建创业公司后台技术栈 3.某视频APP推荐详解(万字长文) 4.微博推荐算法实践与机器学习平台演进 5.腾讯PCG推荐系统应用实践 6.强化学 ...
- qt 历史记录控件_基于Qt图形界面软件的操作日志记录方法及系统_2015106293015_说明书_专利查询_专利网_钻瓜专利网...
技术领域 本发明涉及一种软件系统的日志记录技术,特别涉及一种基于Qt图形界面软件的操作日志记录方法及系统. 背景技术 软件操作日志是记录用户在使用软件的过程中,通过鼠标和键盘在操作界面上执行的点击和输 ...
- 美团的系统是如何记录操作日志?
来源:美团技术团队 操作日志几乎存在于每个系统中,而这些系统都有记录操作日志的一套 API.操作日志和系统日志不一样,操作日志必须要做到简单易懂.所以如何让操作日志不跟业务逻辑耦合,如何让操作日志的内 ...
- 记录操作日志(JAVA版某大厂基础实践)
1. 操作日志的使用场景 2. 实现方式 2.1 使用 Canal 监听数据库记录操作日志 2.2 通过日志文件的方式记录 2.3 通过 LogUtil 的方式记录日志 2.4 方法注解实现操作日志 ...
- 用aspect在springboot中记录操作日志至数据库的详细过程
代码来自若依管理系统的后台,我截取的其中用于记录操作日志的部分 1.切面 2.操作日志表 3.spring工具类 4.客户端工具类 异步工厂(产生任务用) 异步任务管理器 5.服务层 6.控制层 1. ...
- springmvc+log4j操作日志记录,详细配置
没有接触过的,先了解一下:log4j教程 部分内容来:log4j教程 感谢! 需要导入包: log包:log4j-12.17.jar 第一步:web.xml配置 <!-- log4j配置,文件路 ...
- Django中间件实现操作日志记录
Django中间件实现操作日志 本文通过Django中间件的流程,实现操作日志记录的功能,模块化.拿来即用. 功能描述:通过中间件记录 请求时间.操作用户.请求URL.请求方法.请求IP.请求参数和响 ...
- mysql qpstps测试_mysql操作日志
关于 mysql操作日志的搜索结果 回答 增量备份的原理就是使用了mysql的binlog日志.本次操作的MySQL版本为5.5.40 for Linux (x86_64).增量备份要确保打开了二进制 ...
- tp5记录用户的操作日志_【干货】日志管理与分析(四)日志管理规程
接<日志管理与分析(三)--对日志系统的攻击>,如果你的企业没有认真地对待日志,那么就可以说明你的企业对IT可审核性并不重视,这也就是日志记录成为一种完善的依从性技术,许多法规和法律以及最 ...
最新文章
- Microbiome:简单套路发高分文章--杨树内生和根际微生物组结构
- 串口的波特率误差对数据发送影响
- QML基础类型之point
- pybot --help
- 局域共享解决——用户账户限制,可能的原因包括不允许空密码,登录时间限制...
- java基础的第二轮快速学习!day03
- java 调度etl_Easy Scheduler是一个工作流调度系统,主要解决数据研发ETL错综复杂的依赖关系...
- iPhone SDK开发基础之iPhone程序框架
- 我的网站之一(搭建网站架构)
- java post上传进度,OkHttp实现文件上传进度
- Vmware虚拟机的linux与主机共享
- 如何使用WindowsPerformanceToolKit对程序进行分析
- easyui textbox获取焦点事件
- xp_cmdshell 用法
- 你应该了解的GPS经纬度
- 大联大品佳集团推出基于Audiowise产品的蓝牙5.1助听(Hearing Device)耳机方案
- 光滑曲线_光滑流形(4)
- 王的机器第一本书「快乐机器学习」飨你
- unity3d占用内存太大解决方法
- 电力公司SMS短信群发平台的设计与实现
热门文章
- 人生百味-4:“程序猿”不要做成“驴”
- CleanMyMac4.13最新版Mac系统电脑管家
- NR HARQ(一)概述
- Re4:读论文 CGSum: Enhancing Scientific Papers Summarization with Citation Graph
- linux下访问12306问题
- java中Scanner使用方法详细
- 【tokio】spawn
- android类型强制转换,android中如何进行强制类型转换
- 获取gtf文件gene symbol ENSID gene_biotype
- QPalette设置各种背景色