AccessLog.py 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. from django.views.generic.base import View
  2. from django.utils.decorators import method_decorator
  3. from django.views.decorators.csrf import csrf_exempt
  4. from Service.TokenManager import JSONTokenManager
  5. from Service.ModelService import ModelService
  6. from Service.TemplateService import TemplateService
  7. from Model.models import Access_Log
  8. import datetime
  9. from Service.ResponseService import *
  10. from django.core import serializers
  11. import chardet
  12. '''
  13. http://192.168.136.40:8077/accesslog?operation=queryByAdmin&token=test&page=1&line=5&order=-id
  14. http://192.168.136.40:8077/accesslog?operation=truncateByAdmin&token=test
  15. http://192.168.136.40:8077/accesslog?operation=searchByAdmin&token=test&page=1&line=10&content={"status":20}&order=-id
  16. http://127.0.0.1:8000/accesslog?operation=loginUserNum&token=stest
  17. http://127.0.0.1:8000/accesslog/loginUserNum?token=stest
  18. http://127.0.0.1:8000/accesslog?operation=AllLoginArea&token=stest
  19. http://192.168.136.40:8077/access/staticPath?token=stest
  20. '''
  21. class AccessLog(View):
  22. @method_decorator(csrf_exempt)
  23. def dispatch(self, *args, **kwargs):
  24. return super(AccessLog, self).dispatch(*args, **kwargs)
  25. def get(self, request, *args, **kwargs):
  26. request.encoding = 'utf-8'
  27. return self.validation(request_dict=request.GET)
  28. def post(self, request, *args, **kwargs):
  29. request.encoding = 'utf-8'
  30. return self.validation(request_dict=request.POST)
  31. def validation(self, request_dict, *args, **kwargs):
  32. token = request_dict.get('token', None)
  33. if token is not None:
  34. tokenManager = JSONTokenManager()
  35. error_code = tokenManager.verify_AToken(token)
  36. if error_code == 0:
  37. userID = tokenManager.accessDict.get('userID', None)
  38. operation = request_dict.get('operation', None)
  39. param_flag = CommonService.get_param_flag(data=[userID, operation])
  40. if param_flag is True:
  41. if operation == 'queryByAdmin':
  42. return self.query_by_admin(request_dict=request_dict, userID=userID)
  43. elif operation == 'searchByAdmin':
  44. return self.search_by_admin(request_dict=request_dict, userID=userID)
  45. elif operation == 'truncateByAdmin':
  46. return self.truncate_by_admin(userID=userID)
  47. elif operation == 'loginUserNum':
  48. return self.login_user_num(userID=userID)
  49. elif operation == 'AllLoginArea':
  50. return self.getAllLoginArea(userID=userID)
  51. return ResponseJSON(444)
  52. else:
  53. return HttpResponse(tokenManager.errorCodeInfo(error_code))
  54. else:
  55. return ResponseJSON(311)
  56. def query_by_admin(self, request_dict, userID):
  57. page = int(request_dict.get('page', None))
  58. line = int(request_dict.get('line', None))
  59. order = request_dict.get('order', '-id')
  60. if order == '':
  61. order = '-id'
  62. param_flag = CommonService.get_param_flag(data=[page, line])
  63. if param_flag is True:
  64. check_perm = ModelService.check_permission(userID=userID, permID=30)
  65. if check_perm is True:
  66. access_log_queryset = Access_Log.objects.all().order_by(order)
  67. if access_log_queryset.exists():
  68. count = access_log_queryset.count()
  69. res = access_log_queryset[(page - 1) * line:page * line]
  70. send_json = CommonService.query_set_to_dict(res)
  71. send_json['count'] = count
  72. return ResponseJSON(0,send_json)
  73. return ResponseJSON(0, {'datas': [], 'count': 0})
  74. else:
  75. return ResponseJSON(404)
  76. else:
  77. return ResponseJSON(444)
  78. def truncate_by_admin(self, userID):
  79. check_perm = ModelService.check_permission(userID=userID, permID=10)
  80. if check_perm is True:
  81. from django.db import connection
  82. cursor = connection.cursor()
  83. cursor.execute("TRUNCATE TABLE `access_log`")
  84. return ResponseJSON(0)
  85. def search_by_admin(self, request_dict, userID):
  86. page = int(request_dict.get('page', None))
  87. line = int(request_dict.get('line', None))
  88. order = request_dict.get('order', '-id')
  89. content = request_dict.get('content', None)
  90. starttime = request_dict.get('starttime', None)
  91. endtime = request_dict.get('endtime', None)
  92. param_flag = CommonService.get_param_flag(data=[page, line])
  93. if param_flag is True:
  94. check_perm = ModelService.check_permission(userID=userID, permID=20)
  95. if check_perm is True:
  96. try:
  97. content = json.loads(content)
  98. search_kwargs = CommonService.get_kwargs(data=content)
  99. queryset = Access_Log.objects.filter(**search_kwargs).order_by(order)
  100. except Exception as e:
  101. return ResponseJSON(444)
  102. if starttime is not None and starttime != '' and endtime is not None and endtime != '':
  103. startt = datetime.datetime.fromtimestamp(int(starttime))
  104. starttime = startt.strftime("%Y-%m-%d %H:%M:%S.%f")
  105. endt = datetime.datetime.fromtimestamp(int(endtime))
  106. endtime = endt.strftime("%Y-%m-%d %H:%M:%S.%f")
  107. # var_dump(starttime,endtime)
  108. queryset = queryset.filter(time__range=(starttime, endtime))
  109. elif starttime is not None and starttime != '':
  110. startt = datetime.datetime.fromtimestamp(int(starttime))
  111. starttime = startt.strftime("%Y-%m-%d %H:%M:%S.%f")
  112. queryset = queryset.filter(time__gte=starttime)
  113. elif endtime is not None and endtime != '':
  114. endt = datetime.datetime.fromtimestamp(int(endtime))
  115. endtime = endt.strftime("%Y-%m-%d %H:%M:%S.%f")
  116. queryset = queryset.filter(time__lte=endtime)
  117. if queryset.exists():
  118. count = queryset.count()
  119. res = queryset[(page - 1) * line:page * line]
  120. send_json = CommonService.query_set_to_dict(res)
  121. send_json['count'] = count
  122. return ResponseJSON(0,send_json)
  123. return ResponseJSON(0,{'datas': [], 'count': 0})
  124. else:
  125. return ResponseJSON(404)
  126. else:
  127. return ResponseJSON(444)
  128. # 获取登录用户的ip的登录情况的接口
  129. def login_user_num(self, userID):
  130. check_perm = ModelService.check_permission(userID=userID, permID=20)
  131. if check_perm is True:
  132. user_list = Access_Log.objects.values("user","ip").distinct().filter(url__contains='account/login').order_by('time')
  133. return ResponseJSON(10,list(user_list[0]))
  134. # print("是否QuerySet")
  135. # print(type(user_list).__name__=='QuerySet')
  136. user_list= list(user_list)
  137. newuser_list="["
  138. count=0
  139. for q in user_list:
  140. # print(type(q))
  141. # 获取ip地址中文名称
  142. ip_addrname=CommonService.getAddr(q['ip'])
  143. # print(ip_addrname)
  144. # 拼凑为字符串类型
  145. ip_addrname='{"ip_addrname":"'+ip_addrname+'"}'
  146. # 把字符串转为字典json
  147. ip_addrname=json.loads(ip_addrname)
  148. # 字典类型合并
  149. ip_addrnameall=dict(q, **ip_addrname)
  150. # print(ip_addrnameall)
  151. str_dict = json.dumps(ip_addrnameall)
  152. newuser_list=newuser_list+str_dict+","
  153. count+=1
  154. newuser_list= newuser_list[:-1]+"]"
  155. # 把字符串转为字典json
  156. newuser_list = json.loads(newuser_list)
  157. # print(newuser_list)
  158. return ResponseJSON(0,{'datas':list(newuser_list), 'count': count})
  159. else:
  160. return ResponseJSON(404)
  161. # 获取所有用户登录的地区
  162. def getAllLoginArea(self, userID):
  163. own_permission = ModelService.check_permission(userID=userID, permID=30)
  164. if own_permission is True:
  165. users = Access_Log.objects.filter(operation='account/login').distinct().values_list('user', flat=True)
  166. ip_dict = {}
  167. for user in users:
  168. qs = Access_Log.objects.values_list('ip', flat=True).filter(operation='account/login',user=user).order_by('time')
  169. ip_dict[user] = qs[0]
  170. return ResponseJSON(0,ip_dict)
  171. else:
  172. return ResponseJSON(404)
  173. @csrf_exempt
  174. def statisticsPath(request):
  175. request.encoding = 'utf-8'
  176. if request.method == 'GET':
  177. request_dict = request.GET
  178. if request.method == 'POST':
  179. request_dict = request.POST
  180. token = request_dict.get('token', None)
  181. if token is not None:
  182. tokenManager = JSONTokenManager()
  183. error_code = tokenManager.verify_AToken(token)
  184. if error_code == 0:
  185. userID = tokenManager.accessDict.get('userID', None)
  186. own_perm = ModelService.check_permission(userID,10)
  187. paths = TemplateService.log_api()
  188. datas = {}
  189. for path in paths:
  190. count = Access_Log.objects.filter(operation=path).count()
  191. datas[path] = count
  192. return ResponseJSON(0, {'datas': datas})
  193. else:
  194. return HttpResponse(tokenManager.errorCodeInfo(error_code))
  195. else:
  196. return ResponseJSON(311)