| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 | import datetimeimport timeimport tracebackimport requestsimport simplejson as jsonfrom django.utils.timezone import utcfrom Object.TokenObject import TokenObjectfrom Object.mongodb import mongodbfrom Service.CommonService import CommonServicefrom Service.ModelService import ModelServicefrom Service.TemplateService import TemplateService# 杂项类,共用行不高,但有些地方需求class MiscellService():    # 获取访问用户名称    @staticmethod    def get_access_name(request_dict):        userName = request_dict.get('userName',None)        if userName:            return userName        else:            token = request_dict.get('token', None)            user = None            if token is not None:                tko = TokenObject(token)                tko.valid()                if tko.code == 0:                    user = ModelService.get_user_name(tko.userID)            return user    @staticmethod    def add_access_log(request, status_code):        try:            request.encoding = 'utf-8'            if request.method == 'GET':                request_dict = request.GET            if request.method == 'POST':                request_dict = request.POST            api_list = TemplateService.log_api()            request_path = request.path.strip().strip('/')            if request_path in api_list:                user = MiscellService.get_access_name(request_dict=request_dict)                clientIP = CommonService.get_ip_address(request)                now_time = datetime.datetime.utcnow().replace(tzinfo=utc).astimezone(utc)                password = request_dict.get('userPwd', None)                if password is not None:                    request_dict = dict(request_dict)                    request_dict.pop('userPwd')                content = json.dumps(request_dict)                add_data = {                    'user': user,                    'ip': clientIP,                    'status': status_code,                    'url': request.META['SERVER_PROTOCOL'] + '-' + request.method + '-' + request.path,                    'operation': request_path,                    'time': now_time,                    'content': content                }                ModelService.addAccessLog(data=add_data)        except Exception as e:            pass    @staticmethod    def access_log(request,response,type):        if request.method == 'GET':            request_dict = request.GET        if request.method == 'POST':            # request.encoding = 'utf-8'            request_dict = request.POST        api_list = TemplateService.log_api()        request_path = request.path.strip().strip('/')        if request_path in api_list:            clientIP = CommonService.get_ip_address(request)            now_time = time.time()            password = request_dict.get('userPwd',None)            if password is not None:                request_dict = dict(request_dict)                request_dict.pop('userPwd')            content = json.dumps(request_dict)            area = CommonService.getAddr(ip=clientIP)            if type == 1:                status_code = 200            else:                status_code = response.status_code            add_data = {                'user': MiscellService.get_access_name(request=request),                'ip': clientIP,                'status': status_code,                'path': request_path,                'method': request.method,                'time': int(now_time),                'area': area,                'content': content,                'et':datetime.datetime.utcnow()            }            mdb = mongodb()            col = "log_access"            mdb.insert_one(col=col, data=add_data)    # 获取所有设备ip地址的指向的国家    @staticmethod    def getArea(ip):        data = {'ip': ip}        country = ''        URL = 'http://ip.taobao.com/service/getIpInfo.php'        try:            r = requests.get(URL, params=data, timeout=3)        except requests.RequestException as e:            print(e)        else:            json_data = r.json()            if json_data['code'] == 0:                if json_data['data']['country'] != 'XX':                    country = json_data['data']['country']        return country    # 下载接口添加访问日志    @staticmethod    def add_ota_download_log(request):        clientIP = CommonService.get_ip_address(request)        request_path = request.path.strip().strip('/')        now_time = datetime.datetime.utcnow().replace(tzinfo=utc).astimezone(utc)        add_data = {            'user': 'None',            'ip': clientIP,            'status': 200,            'url': request.META['SERVER_PROTOCOL'] + '-' + request.method + '-' + request.path,            'operation': request_path,            'time': now_time,            'content': ''        }        ModelService.addAccessLog(data=add_data)
 |