from django.views.generic.base import View from django.utils.decorators import method_decorator from django.views.decorators.csrf import csrf_exempt from Service.TokenManager import JSONTokenManager from Service.ModelService import ModelService from Service.CommonService import CommonService from Model.models import Access_Log import datetime from var_dump import var_dump from Service.ResponseService import * ''' http://192.168.136.40:8077/accesslog?operation=queryByAdmin&token=test&page=1&line=5&order=-id http://192.168.136.40:8077/accesslog?operation=truncateByAdmin&token=test http://192.168.136.40:8077/accesslog?operation=searchByAdmin&token=test&page=1&line=10&content={"status":20}&order=-id ''' class AccessLog(View): @method_decorator(csrf_exempt) def dispatch(self, *args, **kwargs): return super(AccessLog, self).dispatch(*args, **kwargs) def get(self, request, *args, **kwargs): request.encoding = 'utf-8' return self.validation(request_dict=request.GET) def post(self, request, *args, **kwargs): request.encoding = 'utf-8' return self.validation(request_dict=request.POST) def validation(self, request_dict, *args, **kwargs): token = request_dict.get('token', None) if token is not None: tokenManager = JSONTokenManager() error_code = tokenManager.verify_AToken(token) if error_code == 0: userID = tokenManager.accessDict.get('userID', None) operation = request_dict.get('operation', None) param_flag = CommonService.get_param_flag(data=[userID, operation]) if param_flag is True: if operation == 'queryByAdmin': return self.query_by_admin(request_dict=request_dict, userID=userID) elif operation == 'searchByAdmin': return self.search_by_admin(request_dict=request_dict, userID=userID) elif operation == 'truncateByAdmin': return self.truncate_by_admin(userID=userID) return ResponseJSON(444) else: return HttpResponse(tokenManager.errorCodeInfo(error_code)) else: return ResponseJSON(311) def query_by_admin(self, request_dict, userID): page = int(request_dict.get('page', None)) line = int(request_dict.get('line', None)) order = request_dict.get('order', '-id') if order == '': order = '-id' param_flag = CommonService.get_param_flag(data=[page, line]) if param_flag is True: check_perm = ModelService.check_permission(userID=userID, permID=30) if check_perm is True: access_log_queryset = Access_Log.objects.all().order_by(order) if access_log_queryset.exists(): count = access_log_queryset.count() res = access_log_queryset[(page - 1) * line:page * line] send_json = CommonService.query_set_to_dict(res) send_json['count'] = count return ResponseJSON(0,send_json) return ResponseJSON(0, {'datas': [], 'count': 0}) else: return ResponseJSON(404) else: return ResponseJSON(444) def truncate_by_admin(self, userID): check_perm = ModelService.check_permission(userID=userID, permID=10) if check_perm is True: from django.db import connection cursor = connection.cursor() cursor.execute("TRUNCATE TABLE `access_log`") return ResponseJSON(0) def search_by_admin(self, request_dict, userID): page = int(request_dict.get('page', None)) line = int(request_dict.get('line', None)) order = request_dict.get('order', '-id') content = request_dict.get('content', None) starttime = request_dict.get('starttime', None) endtime = request_dict.get('endtime', None) param_flag = CommonService.get_param_flag(data=[page, line]) if param_flag is True: check_perm = ModelService.check_permission(userID=userID, permID=20) if check_perm is True: try: content = json.loads(content) search_kwargs = CommonService.get_kwargs(data=content) except Exception as e: return ResponseJSON(444) queryset = Access_Log.objects.filter(**search_kwargs).order_by(order) if starttime is not None and starttime != '' and endtime is not None and endtime != '': startt = datetime.datetime.fromtimestamp(int(starttime)) starttime = startt.strftime("%Y-%m-%d %H:%M:%S.%f") endt = datetime.datetime.fromtimestamp(int(endtime)) endtime = endt.strftime("%Y-%m-%d %H:%M:%S.%f") var_dump(starttime,endtime) queryset = queryset.filter(time__range=(starttime, endtime)) elif starttime is not None and starttime != '': startt = datetime.datetime.fromtimestamp(int(starttime)) starttime = startt.strftime("%Y-%m-%d %H:%M:%S.%f") queryset = queryset.filter(time__gte=starttime) elif endtime is not None and endtime != '': endt = datetime.datetime.fromtimestamp(int(endtime)) endtime = endt.strftime("%Y-%m-%d %H:%M:%S.%f") queryset = queryset.filter(time__lte=endtime) if queryset.exists(): count = queryset.count() res = queryset[(page - 1) * line:page * line] send_json = CommonService.query_set_to_dict(res) send_json['count'] = count return ResponseJSON(0,send_json) return ResponseJSON(0,{'datas': [], 'count': 0}) else: return ResponseJSON(404) else: return ResponseJSON(444)