123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- #!/usr/bin/env python3
- # -*- coding: utf-8 -*-
- import json
- import threading
- import time
- from django.utils.deprecation import MiddlewareMixin
- from Model.models import UserModel, LogModel
- from Object import TokenObject
- from Object.TokenObject import TokenObject
- from Service.CommonService import CommonService
- class LogMiddleware(MiddlewareMixin):
- def process_response(self, request, response):
- if request.path != '/favicon.ico':
- self.start_log_thread(request, response)
- return response
- def start_log_thread(self, request, response):
- print('start_log_thread')
- asy = threading.Thread(target=add_log, args=(request, response))
- asy.start()
- def add_log(request, response):
- request.encoding = 'utf-8'
- if request.method == 'GET':
- request_dict = request.GET
- elif request.method == 'POST':
- request_dict = request.POST
- else:
- return
- request_path = request.path.strip().strip('/')
- print(request_path)
- jsonObject = {}
- if request_path == 'download' or request_path == 'uid/download':
- if response.status_code != 200:
- return
- else:
- try:
- jsonObject = json.loads(response.content.decode().strip())
- code = jsonObject.get('code')
- except Exception as e:
- print(repr(e))
- return
- if code is None or code != 0 and response.status_code != 200:
- print('code is {code}'.format(code=code))
- return
- token = request_dict.get('token', None)
- token = TokenObject(token)
- status = response.status_code
- # 去除密码
- contentDict = dict(request_dict)
- password = contentDict.get('password')
- if password:
- contentDict.pop('password')
- content = json.dumps(contentDict)
- ip = CommonService.get_ip_address(request)
- now_time = time.time()
- if token.code == 0:
- user_qs = UserModel.objects.filter(id=token.userID)
- else:
- username = request_dict.get('username', None)
- if username is None:
- print('username')
- return
- user_qs = UserModel.objects.filter(username=username)
- if not user_qs.exists():
- return
- user = user_qs[0]
- operation = ''
- if request_path == 'user/login':
- operation = '登录账号'
- elif request_path == 'user/logout':
- operation = '退出登录'
- elif request_path == 'user/modify':
- operation = '修改密码'
- elif request_path == 'upload':
- area = request_dict.get('area', None)
- count = jsonObject['res']['count']
- operation = formatOperation('上传', int(count), int(area))
- elif request_path == 'uid/allot':
- area = request_dict.get('area', None)
- quantity = request_dict.get('quantity', None)
- if area and quantity:
- operation = formatOperation('分配', int(quantity), int(area))
- elif request_path == 'download':
- area = request_dict.get('area', None)
- quantity = request_dict.get('quantity', None)
- if area and quantity:
- operation = formatOperation('下载', int(quantity), int(area))
- else:
- return
- log = {
- 'status': status,
- 'content': content,
- 'ip': ip,
- 'time': now_time,
- 'url': request_path,
- 'operation': operation,
- 'user': user
- }
- try:
- LogModel.objects.create(**log)
- except Exception as e:
- print(repr(e))
- def formatOperation(operation, quantity, area):
- str = '{operation}{quantity}个{area}UID'
- if area == 0:
- return str.format(operation=operation, quantity=quantity, area='国内')
- else:
- return str.format(operation=operation, quantity=quantity, area='国外')
|