#-*-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 )