dvlyadmin_pro/backend/mysystem/views/operation_log.py
2025-03-18 08:46:50 +08:00

104 lines
3.4 KiB
Python

# -*- coding: utf-8 -*-
"""
@Remark: 操作日志管理
"""
import os
from mysystem.models import OperationLog
from utils.serializers import CustomModelSerializer
from utils.viewset import CustomModelViewSet
from utils.jsonResponse import SuccessResponse, ErrorResponse,DetailResponse
from utils.filters import OperationLogTimeFilter
from utils.server.system import system
from application.settings import BASE_DIR
from utils.common import get_parameter_dic,ast_convert
from rest_framework import serializers
class OperationLogSerializer(CustomModelSerializer):
"""
操作日志-序列化器
"""
creator_name = serializers.SerializerMethodField()
request_body = serializers.SerializerMethodField()
json_result = serializers.SerializerMethodField()
def get_creator_name(self,obj):
try:
if obj.creator_id:
return obj.creator.name
return ""
except:
return ""
def get_request_body(self,obj):
return ast_convert(obj.request_body)
def get_json_result(self,obj):
return ast_convert(obj.json_result)
class Meta:
model = OperationLog
fields = "__all__"
read_only_fields = ["id"]
class OperationLogCreateUpdateSerializer(CustomModelSerializer):
"""
操作日志 创建/更新时的列化器
"""
class Meta:
model = OperationLog
fields = '__all__'
class OperationLogViewSet(CustomModelViewSet):
"""
操作日志接口
list:查询
create:新增
update:修改
retrieve:单例
destroy:删除
"""
queryset = OperationLog.objects.all().order_by('-create_datetime')
serializer_class = OperationLogSerializer
# filterset_fields = '__all__'
filterset_class = OperationLogTimeFilter
search_fields = ('request_modular','request_path','request_ip','request_os','request_body')
def getOwnerLogs(self, request, *args, **kwargs):
user = request.user
queryset = self.filter_queryset(self.get_queryset())
queryset = queryset.filter(creator=user)
page = self.paginate_queryset(queryset)
if page is not None:
serializer = self.get_serializer(page, many=True, request=request)
return self.get_paginated_response(serializer.data)
serializer = self.get_serializer(queryset, many=True, request=request)
return SuccessResponse(data=serializer.data, msg="获取成功")
def deletealllogs(self,request):
user = request.user
if user.is_superuser:
OperationLog.objects.all().delete()
return SuccessResponse(msg="清空成功")
return ErrorResponse(msg="您没有权限执行此操作,需要超级管理员权限")
def system_logs(self,request):
"""
取系统日志
"""
type = int(get_parameter_dic(request).get('type',0))
if type not in [1,2]:
return ErrorResponse(msg="type error")
log_path = os.path.join(BASE_DIR,'logs','error.log')
if type == 1:
log_path = os.path.join(BASE_DIR,'logs','error.log')
elif type == 2:
log_path = os.path.join(BASE_DIR,'logs','server.log')
num = 1000
data = system.GetFileLastNumsLines(log_path,num)
return DetailResponse(data=data,msg="success")