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. 【实践】万字干货:如何优雅地记录操作日志?(附代码)

    猜你喜欢 1.如何搭建一套个性化推荐系统? 2.从零开始搭建创业公司后台技术栈 3.某视频APP推荐详解(万字长文) 4.微博推荐算法实践与机器学习平台演进 5.腾讯PCG推荐系统应用实践 6.强化学 ...

  2. qt 历史记录控件_基于Qt图形界面软件的操作日志记录方法及系统_2015106293015_说明书_专利查询_专利网_钻瓜专利网...

    技术领域 本发明涉及一种软件系统的日志记录技术,特别涉及一种基于Qt图形界面软件的操作日志记录方法及系统. 背景技术 软件操作日志是记录用户在使用软件的过程中,通过鼠标和键盘在操作界面上执行的点击和输 ...

  3. 美团的系统是如何记录操作日志?

    来源:美团技术团队 操作日志几乎存在于每个系统中,而这些系统都有记录操作日志的一套 API.操作日志和系统日志不一样,操作日志必须要做到简单易懂.所以如何让操作日志不跟业务逻辑耦合,如何让操作日志的内 ...

  4. 记录操作日志(JAVA版某大厂基础实践)

    1. 操作日志的使用场景 2. 实现方式 2.1 使用 Canal 监听数据库记录操作日志 2.2 通过日志文件的方式记录 2.3 通过 LogUtil 的方式记录日志 2.4 方法注解实现操作日志 ...

  5. 用aspect在springboot中记录操作日志至数据库的详细过程

    代码来自若依管理系统的后台,我截取的其中用于记录操作日志的部分 1.切面 2.操作日志表 3.spring工具类 4.客户端工具类 异步工厂(产生任务用) 异步任务管理器 5.服务层 6.控制层 1. ...

  6. springmvc+log4j操作日志记录,详细配置

    没有接触过的,先了解一下:log4j教程 部分内容来:log4j教程 感谢! 需要导入包: log包:log4j-12.17.jar 第一步:web.xml配置 <!-- log4j配置,文件路 ...

  7. Django中间件实现操作日志记录

    Django中间件实现操作日志 本文通过Django中间件的流程,实现操作日志记录的功能,模块化.拿来即用. 功能描述:通过中间件记录 请求时间.操作用户.请求URL.请求方法.请求IP.请求参数和响 ...

  8. mysql qpstps测试_mysql操作日志

    关于 mysql操作日志的搜索结果 回答 增量备份的原理就是使用了mysql的binlog日志.本次操作的MySQL版本为5.5.40 for Linux (x86_64).增量备份要确保打开了二进制 ...

  9. tp5记录用户的操作日志_【干货】日志管理与分析(四)日志管理规程

    接<日志管理与分析(三)--对日志系统的攻击>,如果你的企业没有认真地对待日志,那么就可以说明你的企业对IT可审核性并不重视,这也就是日志记录成为一种完善的依从性技术,许多法规和法律以及最 ...

最新文章

  1. Microbiome:简单套路发高分文章--杨树内生和根际微生物组结构
  2. 串口的波特率误差对数据发送影响
  3. QML基础类型之point
  4. pybot --help
  5. 局域共享解决——用户账户限制,可能的原因包括不允许空密码,登录时间限制...
  6. java基础的第二轮快速学习!day03
  7. java 调度etl_Easy Scheduler是一个工作流调度系统,主要解决数据研发ETL错综复杂的依赖关系...
  8. iPhone SDK开发基础之iPhone程序框架
  9. 我的网站之一(搭建网站架构)
  10. java post上传进度,OkHttp实现文件上传进度
  11. Vmware虚拟机的linux与主机共享
  12. 如何使用WindowsPerformanceToolKit对程序进行分析
  13. easyui textbox获取焦点事件
  14. xp_cmdshell 用法
  15. 你应该了解的GPS经纬度
  16. 大联大品佳集团推出基于Audiowise产品的蓝牙5.1助听(Hearing Device)耳机方案
  17. 光滑曲线_光滑流形(4)
  18. 王的机器第一本书「快乐机器学习」飨你
  19. unity3d占用内存太大解决方法
  20. 电力公司SMS短信群发平台的设计与实现

热门文章

  1. 人生百味-4:“程序猿”不要做成“驴”
  2. CleanMyMac4.13最新版Mac系统电脑管家
  3. NR HARQ(一)概述
  4. Re4:读论文 CGSum: Enhancing Scientific Papers Summarization with Citation Graph
  5. linux下访问12306问题
  6. java中Scanner使用方法详细
  7. 【tokio】spawn
  8. android类型强制转换,android中如何进行强制类型转换
  9. 获取gtf文件gene symbol ENSID gene_biotype
  10. QPalette设置各种背景色