# -*- coding: utf-8 -*- import time,datetime from pathlib import Path from random import Random import simplejson as json from django.core import serializers from django.utils import timezone from pyipip import IPIPDatabase from Ansjer.config import BASE_DIR # 复用性且公用较高封装代码在这 class CommonService: # 返回数据格式化 @staticmethod def response_formal(data={'code': '', 'reason': '', 'result': {}}): resJSON = json.dumps( { "result_code": data['code'], "reason": data['reason'], "result": data['result'], "error_code": data['code'], }, ensure_ascii=False) return resJSON # 添加模糊搜索 @staticmethod def get_kwargs(data={}): kwargs = {} for (k, v) in data.items(): if v is not None and v != u'': kwargs[k + '__icontains'] = v return kwargs # 定义静态方法 # 格式化query_set转dict @staticmethod def qs_to_dict(query_set): sqlJSON = serializers.serialize('json', query_set) sqlList = json.loads(sqlJSON) sqlDict = dict(zip(["datas"], [sqlList])) return sqlDict # 获取文件大小 @staticmethod def get_file_size(file_path='', suffix_type='', decimal_point=0): # for x in ['bytes', 'KB', 'MB', 'GB', 'TB']: # path = Path() / 'D:/TestServer/123444.mp4' path = Path() / file_path size = path.stat().st_size mb_size = 0.0 if suffix_type == 'MB': mb_size = size / 1024.0 / 1024.0 if decimal_point != 0: mb_size = round(mb_size, decimal_point) return mb_size @staticmethod def get_param_flag(data=[]): print(data) flag = True for v in data: if v is None: flag = False break return flag @staticmethod def get_ip_address(request): """ 获取ip地址 :param request: :return: """ ip = request.META.get("HTTP_X_FORWARDED_FOR", "") if not ip: ip = request.META.get('REMOTE_ADDR', "") client_ip = ip.split(",")[-1].strip() if ip else "" return client_ip # @获取一天每个小时的datetime.datetime @staticmethod def getTimeDict(times): time_dict = {} t = 0 for x in range(24): if x < 10: x = '0' + str(x) else: x = str(x) a = times.strftime("%Y-%m-%d") + " " + x + ":00:00" time_dict[t] = timezone.datetime.strptime(a, '%Y-%m-%d %H:%M:%S') t += 1 return time_dict # 根据ip获取地址 @staticmethod def getAddr(ip): base_dir = BASE_DIR # ip数据库 db = IPIPDatabase(base_dir + '/DB/17monipdb.dat') addr = db.lookup(ip) ts = addr.split('\t')[0] return ts @staticmethod def getUserID(userPhone='13800138000', getUser=True, setOTAID=False, μs=True): if μs == True: if getUser == True: timeID = str(round(time.time() * 1000000)) userID = timeID + userPhone return userID else: if setOTAID == False: timeID = str(round(time.time() * 1000000)) ID = userPhone + timeID return ID else: timeID = str(round(time.time() * 1000000)) eID = '13800' + timeID + '138000' return eID else: if getUser == True: timeID = str(round(time.time() * 1000)) userID = timeID + userPhone return userID else: if setOTAID == False: timeID = str(round(time.time() * 1000)) ID = userPhone + timeID return ID else: timeID = str(round(time.time() * 1000)) eID = '13800' + timeID + '138000' return eID # 生成随机数 @staticmethod def RandomStr(randomlength=8, number=True): str = '' if number == False: characterSet = 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsT' \ 'tUuVvWwXxYyZz0123456789' else: characterSet = '0123456789' length = len(characterSet) - 1 random = Random() for index in range(randomlength): str += characterSet[random.randint(0, length)] return str # 生成订单好 @staticmethod def createOrderID(): random_id = CommonService.RandomStr(6,True) order_id = datetime.datetime.now().strftime('%Y%m%d%H%M%S') + str(random_id) print('orderID:') print(order_id) return order_id # qs转换list datetime处理 @staticmethod def qs_to_list(qs): res = [] for ps in qs: if 'add_time' in ps: ps['add_time'] = ps['add_time'].strftime("%Y-%m-%d %H:%M:%S") if 'update_time' in ps: ps['update_time'] = ps['update_time'].strftime("%Y-%m-%d %H:%M:%S") if 'end_time' in ps: ps['end_time'] = ps['end_time'].strftime("%Y-%m-%d %H:%M:%S") res.append(ps) return res