| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206 | 
							- import datetime
 
- import simplejson as json
 
- from django.utils.decorators import method_decorator
 
- from django.views.decorators.csrf import csrf_exempt
 
- from django.views.generic.base import View
 
- from ratelimit.decorators import ratelimit
 
- from Model.models import Access_Log
 
- from Object.ResponseObject import ResponseObject
 
- from Object.TokenObject import TokenObject
 
- from Service.CommonService import CommonService
 
- from Service.ModelService import ModelService
 
- from Service.TemplateService import TemplateService
 
- '''
 
- 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
 
- http://192.168.136.40:8077/accesslog/staticPath/?token=stest
 
- '''
 
- class AccessLog(View):
 
-     @method_decorator(csrf_exempt)
 
-     def dispatch(self, *args, **kwargs):
 
-         return super(AccessLog, self).dispatch(*args, **kwargs)
 
-     def get(self, request):
 
-         response = ResponseObject()
 
-         request.encoding = 'utf-8'
 
-         return self.validation(request.GET, response)
 
-     def post(self, request):
 
-         response = ResponseObject()
 
-         request.encoding = 'utf-8'
 
-         return self.validation(request.POST, response)
 
-     def validation(self, request_dict, response):
 
-         token = request_dict.get('token', None)
 
-         if token is not None:
 
-             tko = TokenObject(token)
 
-             tko.valid()
 
-             response.lang = tko.lang
 
-             if tko.code == 0:
 
-                 userID = tko.userID
 
-                 operation = request_dict.get('operation', None)
 
-                 if userID is not None and operation is not None:
 
-                     if operation == 'queryByAdmin':
 
-                         return self.query_by_admin(request_dict, userID, response)
 
-                     elif operation == 'searchByAdmin':
 
-                         return self.search_by_admin(request_dict, userID, response)
 
-                     elif operation == 'truncateByAdmin':
 
-                         return self.truncate_by_admin(userID, response)
 
-                 return response.json(444, 'token,operation')
 
-             else:
 
-                 return response.json(tko.code)
 
-         else:
 
-             return response.json(309)
 
-     def query_by_admin(self, request_dict, userID, response):
 
-         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.qs_to_dict(res)
 
-                     send_json['count'] = count
 
-                     return response.json(0, send_json)
 
-                 return response.json(0, {'datas': [], 'count': 0})
 
-             else:
 
-                 return response.json(404)
 
-         else:
 
-             return response.json(444)
 
-     # 清空日志表
 
-     def truncate_by_admin(self, userID, response, ):
 
-         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 response.json(0)
 
-     # 搜索日志(多条件)
 
-     def search_by_admin(self, request_dict, userID, response):
 
-         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)
 
-         if page is not None and line is not None:
 
-             check_perm = ModelService.check_permission(userID=userID, permID=20)
 
-             if check_perm is True:
 
-                 try:
 
-                     content = json.loads(content)
 
-                     kwargs = {}
 
-                     for (k, v) in content.items():
 
-                         if v is not None and v != u'':
 
-                             if k == 'content':
 
-                                 kwargs[k + '__icontains'] = v
 
-                             else:
 
-                                 kwargs[k] = v
 
-                     queryset = Access_Log.objects.filter(**kwargs).order_by(order)
 
-                 except Exception as e:
 
-                     return response.json(444)
 
-                 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")
 
-                     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.qs_to_dict(res)
 
-                     send_json['count'] = count
 
-                     return response.json(0, send_json)
 
-                 return response.json(0, {'datas': [], 'count': 0})
 
-             else:
 
-                 return response.json(404)
 
-         else:
 
-             return response.json(444, 'page,line')
 
- @ratelimit(key='ip', rate='3/m')
 
- def statisticsPath(request):
 
-     request.encoding = 'utf-8'
 
-     if request.method == 'GET':
 
-         request_dict = request.GET
 
-     if request.method == 'POST':
 
-         request_dict = request.POST
 
-     token = request_dict.get('token', None)
 
-     response = ResponseObject()
 
-     was_limited = getattr(request, 'limited', False)
 
-     # 限制同一个ip该接口一分钟不能访问超过两次
 
-     if was_limited is True:
 
-         return response.json(5)
 
-     if token is not None:
 
-         tko = TokenObject(token)
 
-         tko.valid()
 
-         response.lang = tko.lang
 
-         if tko.code == 0:
 
-             userID = tko.userID
 
-             own_perm = ModelService.check_permission(userID, 10)
 
-             if own_perm is True:
 
-                 paths = TemplateService.log_api()
 
-                 datas = {}
 
-                 for path in paths:
 
-                     count = Access_Log.objects.filter(operation=path).count()
 
-                     datas[path] = count
 
-                 return response.json(0, {'datas': datas})
 
-             else:
 
-                 return response.json(404)
 
-         else:
 
-             return response.json(tko.code)
 
-     else:
 
-         return response.json(444, 'token')
 
- # 按季度删除访问日志
 
- def deleteSn(request):
 
-     request.encoding = 'utf-8'
 
-     if request.method == 'GET':
 
-         request_dict = request.GET
 
-     if request.method == 'POST':
 
-         request_dict = request.POST
 
-     token = request_dict.get('token', None)
 
-     days = request_dict.get('days', None)
 
-     response = ResponseObject()
 
-     if token and days:
 
-         tko = TokenObject(token)
 
-         tko.valid()
 
-         response.lang = tko.lang
 
-         if tko.code == 0:
 
-             userID = tko.userID
 
-             own_perm = ModelService.check_permission(userID, 10)
 
-             if own_perm is True:
 
-                 dltime = datetime.datetime.now()-datetime.timedelta(days=int(days))
 
-                 # count = Access_Log.objects.filter(time__gte=dltime).count()
 
-                 count = Access_Log.objects.filter(time__gte=dltime).delete()
 
-                 return response.json(0,count)
 
-             else:
 
-                 return response.json(404)
 
-         else:
 
-             return response.json(tko.code)
 
-     else:
 
-         return response.json(444, 'token')
 
 
  |