# -*- 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")