OpLogMiddleware.py 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. #-*-coding:utf-8 -*-
  2. """
  3. """
  4. import re,json
  5. import common.models as cm
  6. import common.core_views as cv
  7. class OpLogMiddleware(object):
  8. def __init__(self,get_response):
  9. '''
  10. '''
  11. self.get_response = get_response
  12. def __call__(self,request):
  13. '''
  14. '''
  15. response = self.get_response(request)
  16. path = request.path.strip()
  17. if path not in ["/api/doc/","/favicon.ico","/api/hook/"] and "/api/report/download" not in path:
  18. self.record_oplog(request,response)
  19. return response
  20. def record_oplog(self,request,response):
  21. """
  22. """
  23. try:
  24. op_view = re.findall(r'func=([\.\w]+)\b',str(request.resolver_match))[0]
  25. except:
  26. op_view = "testview"
  27. op_action_flag = request.method
  28. op_url = request.path.strip()
  29. if request.META.get("CONTENT_TYPE","") == "application/json":
  30. reqdata = request.body if request.body else {}
  31. else:
  32. if op_action_flag == "POST":
  33. reqdata = request.POST.dict()
  34. elif op_action_flag == "GET":
  35. reqdata = request.GET.dict()
  36. else:
  37. reqdata = request.body if request.body else {}
  38. reqdata = json.dumps(reqdata)
  39. try:
  40. op_user_name = request.user["name"] if request.user and request.user["id"] else reqdata.get("name",u"匿名")
  41. op_user_realname = request.user["realname"] if request.user and request.user["id"] else reqdata.get("realname",u"匿名")
  42. except:
  43. op_user_name = ""
  44. op_user_realname = ""
  45. try:
  46. op_user_id = request.user["id"] if request.user and request.user["id"] else 0
  47. op_user_id = op_user_id if op_user_id else 0
  48. except:
  49. op_user_id = 0
  50. op_user_ip = cv.get_ip(request)
  51. op_request = json.dumps(reqdata)
  52. try:
  53. response_data = json.loads(response.getvalue())
  54. except:
  55. response_data = {}
  56. if response_data.get("status") == "suc" or response_data.get("code") == 0:
  57. is_suc = 1
  58. error_msg = ""
  59. else:
  60. is_suc = 0
  61. error_msg = response_data.get("message")
  62. last = cm.OperationLogConfig.objects.order_by("order").last()
  63. last_order = last.order if last else 0
  64. obj,flag = cm.OperationLogConfig.objects\
  65. .get_or_create(**{"op_view":op_view,"op_action_flag":op_action_flag,"op_url":op_url})
  66. if flag:
  67. obj.order = last_order
  68. if not obj.op_response:
  69. if response_data.get("status") == "suc" or response_data.get("code") == 0:
  70. obj.op_response = json.dumps(response_data)
  71. obj.save()
  72. cm.OperationLog.objects.create(
  73. op_user_name = op_user_name,
  74. op_user_realname = op_user_realname,
  75. op_user_id = op_user_id,
  76. op_user_ip = op_user_ip,
  77. op_request = op_request,
  78. op_config = obj,
  79. is_suc = is_suc,
  80. error_msg = error_msg
  81. )