| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- #-*-coding:utf-8 -*-
- """
- """
- import re,json
- import common.models as cm
- import common.core_views as cv
- class OpLogMiddleware(object):
- def __init__(self,get_response):
- '''
- '''
- self.get_response = get_response
- def __call__(self,request):
- '''
- '''
- response = self.get_response(request)
- path = request.path.strip()
- if path not in ["/api/doc/","/favicon.ico","/api/hook/"] and "/api/report/download" not in path:
- self.record_oplog(request,response)
- return response
- def record_oplog(self,request,response):
- """
- """
- try:
- op_view = re.findall(r'func=([\.\w]+)\b',str(request.resolver_match))[0]
- except:
- op_view = "testview"
- op_action_flag = request.method
- op_url = request.path.strip()
- if request.META.get("CONTENT_TYPE","") == "application/json":
- reqdata = request.body if request.body else {}
- else:
- if op_action_flag == "POST":
- reqdata = request.POST.dict()
- elif op_action_flag == "GET":
- reqdata = request.GET.dict()
- else:
- reqdata = request.body if request.body else {}
- reqdata = json.dumps(reqdata)
- try:
- op_user_name = request.user["name"] if request.user and request.user["id"] else reqdata.get("name",u"匿名")
- op_user_realname = request.user["realname"] if request.user and request.user["id"] else reqdata.get("realname",u"匿名")
- except:
- op_user_name = ""
- op_user_realname = ""
- try:
- op_user_id = request.user["id"] if request.user and request.user["id"] else 0
- op_user_id = op_user_id if op_user_id else 0
- except:
- op_user_id = 0
- op_user_ip = cv.get_ip(request)
- op_request = json.dumps(reqdata)
- try:
- response_data = json.loads(response.getvalue())
- except:
- response_data = {}
- if response_data.get("status") == "suc" or response_data.get("code") == 0:
- is_suc = 1
- error_msg = ""
- else:
- is_suc = 0
- error_msg = response_data.get("message")
- last = cm.OperationLogConfig.objects.order_by("order").last()
- last_order = last.order if last else 0
- obj,flag = cm.OperationLogConfig.objects\
- .get_or_create(**{"op_view":op_view,"op_action_flag":op_action_flag,"op_url":op_url})
- if flag:
- obj.order = last_order
- if not obj.op_response:
- if response_data.get("status") == "suc" or response_data.get("code") == 0:
- obj.op_response = json.dumps(response_data)
- obj.save()
- cm.OperationLog.objects.create(
- op_user_name = op_user_name,
- op_user_realname = op_user_realname,
- op_user_id = op_user_id,
- op_user_ip = op_user_ip,
- op_request = op_request,
- op_config = obj,
- is_suc = is_suc,
- error_msg = error_msg
- )
|