首页 > 其他分享 >django记录基础操作日志

django记录基础操作日志

时间:2023-04-07 15:23:47浏览次数:37  
标签:name 记录 models request django length 日志 response verbose

1. 新增middleware.py中间件: 需要在setting.py注册

class LoggingMiddleware:
    """
    日志记录模块: 操作用户、操作ip、请求路径、请求方式、请求时间
    """

    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        response = self.get_response(request)

        forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
        if forwarded_for:
            # 以逗号为分隔符,获取最后一个IP地址
            request.internal_ip = forwarded_for.split(',')[-1].strip()
        else:
            request.internal_ip = request.META.get('REMOTE_ADDR')

        if not request.path.startswith("/v5/account/login/") and not request.user.is_authenticated \
                or request.method not in ['POST', 'PUT', 'PATCH', 'DELETE']:
            return response

        print("request.user: ", request.user)
        print("request.path: ", request.path)
        print("request.method: ", request.method)
        print("request.ip: ", request.internal_ip)
        print("status_code: ", response.status_code)
        return response

2. 新增model.py

class LogModel(BaseModel):
    """系统操作日志记录"""

    request_user = models.CharField(max_length=32, blank=True, verbose_name="请求用户")
    request_path = models.CharField(max_length=128, blank=True, verbose_name="请求路径")
    request_method = models.CharField(max_length=8, blank=True, verbose_name="请求方式")
    request_ip = models.CharField(max_length=32, blank=True, verbose_name="请求ip")
    response_code = models.CharField(max_length=8, blank=True, verbose_name="响应码")

    class Meta:
        verbose_name = "系统操作日志"
        verbose_name_plural = verbose_name

还有基于信号实现的(监听某张表的操作)

还有基于django-simple-history的操作。但是这种操作会额外新增一张表(比如你原本有100张表。使用了这个插件会额外生成100张。总共就是200张)

第一种方式最为简洁。代码量更少。可维护性更高(也可以将ContentType表添加进去)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

contenttype配置示例

models配置示例

from django.contrib.contenttypes.models import ContentType
from django.contrib.contenttypes.fields import GenericForeignKey, GenericRelation


class RechargePackage(BaseModel):
    """
    充值描述
    """
    total_fee = models.BigIntegerField(verbose_name="订单的资金总额,单位为分")
    count = models.BigIntegerField(verbose_name='充值次数')
    description = models.CharField(max_length=256, verbose_name="商品描述")
    shopping_car_list = GenericRelation("ShoppingCar")


class ShoppingCar(BaseModel):
    product_type = models.ForeignKey(ContentType, on_delete=models.DO_NOTHING, related_name='product_order_list')
    product_id = models.CharField(max_length=32)
    product = GenericForeignKey('product_type', 'product_id')
    count = models.IntegerField(verbose_name='数量')

 

标签:name,记录,models,request,django,length,日志,response,verbose
From: https://www.cnblogs.com/52-qq/p/17296274.html

相关文章

  • Loki 日志管理
    一、lokiInstallation|GrafanaLokidocumentation1、loki介绍Loki是GrafanaLabs团队发布的开源项目,是一个水平可扩展,高可用性,多租户的日志聚合系统。项目受Prometheus启发,官方的介绍就是:LikePrometheus,butforlogs.,类似于Prometheus的日志系统 二、docker......
  • C#添加log4日志
    第一步导入log4net在vs的程序包管理器控制台中执行命令NuGet\Install-Packagelog4net-Version2.0.0第二步加帮助类HttpHelperusingSystem;usingSystem.Reflection;usinglog4net;usinglog4net.Config;namespacePuYangHiqs{publicclassLogger{......
  • [记录]php url传参json json_decode 后 null
    从APP端或从其他页面post,get过来的数据一般因为数组形式。因为数组形式不易传输,所以一般都会转json后再发送。本以为发送方json_encode(),接收方json_decode(),就解决的问题,结果发现,json_decode()后是NULL。一般会反应是少了一个参数“true”,但是回去看就是 json_decode($data,tru......
  • ctfshow-web4(Nginx日志写shell)
    这是一道有关Nginx日志文件写入shell的题目。  一、基础知识/etc/nginx/nginx.conf:该文件是Ngnix的配置的文件,该文件保存着能够影响服务器运行的配置信息。有时会泄露敏感信息。该文件支持php解析。/var/log/nginx/access.log:该文件是Ngnix的访问日志文件,Ngnix会把每个......
  • 本地存储历史记录
    一 基础概念1)本地存储特性数据存储在用户浏览器中设置读取方便甚至页面刷新不丢失数据只能存储字符串2)分类window.localStorage本地存储window.sessionStorage会话存储3)两者的区别生命周期不同sessionStorage页面关闭数据就不存在了localStorage永久有效......
  • hadoop学习记录
    Hadoop简介安装狭义上Hadoop指的是Apache软件基金会的一款开源软件用java语言实现,开源允许用户使用简单的编程模型实现跨机器集群对海量数据进行分布式计算处理Hadoop核心组件HadoopHDFS(分布式文件存储系统):解决海量数据存储HadoopYARN(集群资源管理和任务调度框架):解决资源任......
  • ORM相关学习记录
    1.orm项目1.1安装ormpipinstallmysqlclient如果windows安装报错后,使用whl安装下载地址:https://pypi.org/project/mysqlclient/#files找到对应python版本的wheel包,然后进行安装,可把包放到scripts目录中执行:pip3.7installmysqlclient-2.1.0-cp37-cp37m-win_amd64.whl1.2......
  • 《3D编程模式》写书-第2次记录
    大家好,目前我已经完成了“拼接模式”、“撤销重做模式”、“ECS模式”的初稿下面会给出它们的使用场景,如果您正好能用到,请联系我提前阅读模式的初稿,欢迎大家给出反馈建议,您的大名有机会出现在《3D编程模式》的书中,感谢!我的QQ号:395976266我的微信号:chaogex这里是所有的的写书......
  • 记录一次免费云主机的白嫖经历
    地点:https://www.sanfengyun.com步骤:1.进入网站2.登录3.完成实名制4.首页找到免费云服务器 5.找到免费开通(按照流程走) 6.申请成功后安装好自己需要的系统   7.安装成功后,使用公网ip,系统账号密码就能远程ssh连接使用感受:整体来说就是免费云服务器,性能和花......
  • Algorithm参数记录
    一、vector<Point2f>vector是一个存储二维点坐标的容器,其中每个元素都是一个Point2f类型的对象。在OpenCV中,Point2f表示一个由两个单精度浮点数构成的二维点坐标。你可以使用vector来存储一些二维坐标信息,比如图像中的关键点或轮廓点等。具体用法可以参考下面的示例:#include<o......