def _Async_insert_result(self): '''异步插入数据 ''' sql = SQL['insert_center_player'] insert_nums = 0 try: conn = connections['write'] cur = conn.cursor() print '-' * 40 #conn.autocommit(True) while 1 : lines = (yield) #print sql if isinstance(lines,(tuple,list)): try:#尝试插入 insert_nums += len(lines) #print sql % lines[0] cur.executemany(sql,lines) except Exception,e: _log.info(trace_msg()) traceback.print_exc() else: break except Exception,e: print '-'*400 _log.warning(trace_msg())
def sync_dict_to_game_server(server_id): '''同步字典到游戏服务表 ''' err_msg = '' values = [] the_delete_sql = 'truncate table log_dict' the_insert_sql = '''INSERT INTO log_dict(`log_type`,`log_time`,`log_name`,`log_previous`,`log_now`)values(0,NOW(),%s,%s,%s)''' for d in DictDefine.objects.filter(type=0): try: dict_key = d.key for k, v in d.dict.iteritems(): values.append((dict_key, k, v)) except: err_msg = trace_msg() if values: try: conn = Server.get_conn(server_id) conn.autocommit(0) cur = conn.cursor() cur.execute(the_delete_sql) cur.executemany(the_insert_sql, values) conn.commit() conn.close() except: err_msg = trace_msg() return err_msg
def _excute_server(self, s_obj): for i in xrange(10): try: sql = self.query_type.sql.replace('{{server_id}}', str(s_obj.id)) \ .replace('{{server_name}}', str(s_obj.name)) \ .replace('{{master_id}}', str(s_obj.master_id)) \ .replace('{{sdate}}', self.sdate_str) \ .replace('{{edate}}', self.edate_str) \ .replace('{{prefix}}', PREFIX) if self.query_type.is_center: # 是否在中央服查询,连接的是MYSQL conn = sm.get_conn(0) else: # 优化查询 conn = sm.get_conn(s_obj.id) file_name = self.query_type.file_format.replace('{{server_id}}', str(s_obj.id)) \ .replace('{{edate}}', self.file_edate or self.edate.strftime(self.DAY_FORMAT)) \ .replace('{{plan_name}}', self.plan_name) \ .replace('{{prefix}}', PREFIX) _log.debug('%s querying...' % self._excute_server_log_str(s_obj)) self.query_type.create_tmp_table(conn, s_obj, self) # 创建金币临时表 self.query_and_write(file_name, conn, sql) _log.info('%s done!' % self._excute_server_log_str(s_obj)) break except Exception, e: print trace_msg() time.sleep(3) if i >= 9: _msg = '%s %s %s(%s) %s - %s error count(%s): %s' % ( self.query_type.name, self.plan_name, s_obj.name, s_obj.id, self.sdate_str, self.edate_str, i,trace_msg()) _log.warning(_msg) post_msg('qq', '%s 游爱自动备份错误 %s %s %s(%s)' % (PREFIX, self.query_type.name, self.plan_name, s_obj.name, s_obj.id), _msg, merge=True)
def get_7daysact(request): '''7天乐活动msg ''' kid = int(request.GET.get('kid', '0') or 0) result = 'activity is not fand!' obj_list = Activity.objects.filter(type='7天乐活动') try: for model in obj_list: msg = json.loads(model.msg) if msg: if kid and kid == msg['kid']: result = msg for al in result['al']: for tl in al: for rw in tl['tl']: for i in range(len(rw['rw'])): rw['rw'][i] = d2l(rw['rw'][i]) for tl in result['tl']: for i in range(len(tl['rw'])): tl['rw'][i] = d2l(tl['rw'][i]) if result['ar']['ty'] == 2: rw = result['ar']['rw'] for i in range(len(rw)): rw[i] = d2l(rw[i]) except Exception, e: print trace_msg()
def _import_module_from_file(): for pyfile in _get_pyfile(os.path.join(PROJECT_ROOT, VIEWS_DIR)): _p_m = pyfile.replace(PROJECT_ROOT, '', 1).replace('__init__', '').rstrip('py').replace( os.sep, '.').strip('.') try: __import__(_p_m) except Exception, e: print trace_msg()
def field_config(self): '''字段定义 ''' try: self.__cache_config = self.__cache_config or json.loads( self._field_config) except: print trace_msg() self.__cache_config = self._DEFAULT_FIELD_CONFIG return self.__cache_config
def mysql_conn(self, select_db=True, connect_timeout=10): '''mysql的连接 ''' if not self.__conn: try: the_conn_str = self.get_log_db_config() the_conn = MySQLdb.connect(host=the_conn_str['host'], user=the_conn_str['user'], passwd=str(the_conn_str['password']), port=the_conn_str.get('port', 3306), charset='utf8', connect_timeout=connect_timeout) the_conn.autocommit(1) self.__conn = the_conn except Exception, e: print trace_msg()
def get_server_pay_user_login_data(self,s_obj,insert_generators): '''获取 充值用户 登录数据 ''' pay_user_ids = self.get_server_pay_user_ids(s_obj.id) pay_user_ids_str = ','.join(pay_user_ids) #登录表: user id, user name, 登录日期 sql = ''' SELECT c.log_user,c1.player_name,date_format(c.log_time,'%Y-%m-%d %H:%i:%S'),c.log_data,c.log_server FROM log_check_user c JOIN player_{sever_id}_tmp c1 ON c.log_user=c1.player_id WHERE c1.create_time >='{sdate}' and c1.create_time<date_add('{sdate}',interval 1 month) AND c.log_user in ({pay_user_ids_str}) order by c.log_user,c.log_data '''.format(pay_user_ids_str=pay_user_ids_str,sdate=self.sdate_str,sever_id=s_obj.id) sql = ''' SELECT c.log_user,c1.player_name,date_format(c.log_time,'%Y-%m') dd,count(0),c.log_server FROM log_check_user c JOIN player_{sever_id}_tmp c1 ON c.log_user=c1.player_id WHERE c1.create_time >='{sdate}' and c1.create_time<date_add('{sdate}',interval 1 month) AND c.log_user in ({pay_user_ids_str}) GROUP BY dd,c.log_user order by c.log_user,dd '''.format(pay_user_ids_str=pay_user_ids_str,sdate=self.sdate_str,sever_id=s_obj.id) pay_user_ids_count = len(pay_user_ids) if int(pay_user_ids[0]) == 0: return _log.info('%s(%s) %s 生成 %s个充值用户登录日志' % (s_obj.name,s_obj.id,self.sdate_str,pay_user_ids_count)) conn = sm.get_conn(s_obj.id) cur = conn.cursor() try: cur.execute(sql) insert_size = 0 self._INSERT_LOCK.acquire() while 1: result = cur.fetchmany(50000) if result: try: _log.info('%s(%s) %s 写入 %s 行充值用户登录日志' % (s_obj.name,s_obj.id,self.sdate_str,len(result))) insert_generators.send(result) except Exception,e: _log.warning(trace_msg()) else: break except Exception,e: _log.warning(trace_msg())
def log_syncdb_do(request,server_id=0): '''同步数据库 ''' server_id = server_id or int(request.REQUEST.get('sid', '0')) is_ajax = request.is_ajax() or request.REQUEST.get('ajax','') err_msg = '' _r = {"code":1,"content":[]} sync_status = {} try: if server_id: is_center = False the_server = Server.objects.get(id=server_id) the_server.create_base_table() #创建数据库,创建player表,创建log基表 conn = the_server.mysql_conn() else: is_center = True conn = Server.get_conn(0) table_status = {"tol_num":0, "sync_num":0, "already_num":0 } index_status = copy.deepcopy(table_status) status = LogDefine.Status.CENTER if is_center else LogDefine.Status.NORMAL cur = conn.cursor() log_defs = LogDefine.objects.filter(status=status) for log_def in log_defs: table_status["tol_num"] += 1 create_tabls_sql = log_def.get_create_table_sql() try: cur.execute(create_tabls_sql) #同步表 table_status["sync_num"] += 1 except MySQLdb.Warning,e: table_status["already_num"] += 1 for create_index_sql in log_def.get_create_index_sqls() : #同步索引 index_status["tol_num"] += 1 #print create_index_sql try: cur.execute(create_index_sql) index_status["sync_num"] += 1 except MySQLdb.OperationalError,e: index_status["already_num"] += 1 except: err_msg = trace_msg() print trace_msg()
def player_info(request): player = { 'user_id': 0, 'player_id': 0, 'player_name': '', 'level': 0, 'server_id': 0 } try: user_type = int(request.GET.get('type', '0')) template_name = request.GET.get('template', '') if template_name.find('/') > 0: template = 'client/%s.html' % template_name else: template = 'client/%s/player_info.html' % template_name if template_name else 'client/player_info.html' openid = get_argument(request, ['uid', 'openid', 'loginName'], 0) server_id = int( get_argument(request, ['serverid', 'server_id', 'sid', 's_id'], 0)) player['server_id'] = server_id if server_id > 0 and openid != '': openid = filter_sql(str(openid)) user_type = user_type server = Server.objects.get(id=server_id) conn = server.mysql_conn() cursor = conn.cursor() query_sql = 'select player_id,player_name from player_%d where user_type=%d and link_key="%s"' % ( server_id, user_type, openid) cursor.execute(query_sql) player_list = cursor.fetchall() if len(player_list) > 0: player['user_id'] = openid player['player_id'] = player_list[0][0] player['player_name'] = player_list[0][1] try: master_server = server.master_server db_name, mongo_conn = master_server.get_mongo_conn() record = mongo_conn[db_name].gl.player.find_one( {'pi': player['player_id']}, {'lv': 1}) player['level'] = record['lv'] mongo_conn.close() except Exception, ex: print trace_msg() except Exception, ex: print trace_msg()
def get_festival(request): '''节日活动msg ''' kid = int(request.GET.get('kid', '0') or 0) result = 'activity is not fand!' obj_list = Activity.objects.filter(type='节日活动') try: for model in obj_list: msg = json.loads(model.msg) if msg: if kid and kid == msg['kid']: result = msg except Exception, e: print trace_msg()
def equip_item_info(request, player_id=0, template='game/equip_item_info.html'): '''角色装备信息 ''' player_id = player_id or int(request.REQUEST.get('player_id', 0)) server_id = int(request.REQUEST.get('server_id', 0)) player_name = request.GET.get('player_name', '') gmp = GMProtocol(server_id) err_msg = '' try: gmp.time_out = 10 # 1:核装,2:普装,3:摆摊挂单,4:法宝,5:血脉,6:道具,7:宠物 # equip_type = [1,2,3,4,5] equip_item = [6] equip_item_list = gmp.get_equip_info(player_id, equip_item) if not equip_item_list: err_msg = "GM工具返回,没有此角色装备!" else: equip_item = get_equip_item(equip_item_list["6"]) tol_equio_num = len(equip_item) except Exception, e: player_info = {} err_msg = trace_msg()
def activity_query(request): '''活动查询 ''' server_id = int(request.REQUEST.get('server_id', '') or 0) msg = request.REQUEST.get('msg', '') activity_model = get_activity_model(request) if not server_id: _r = {"code": -1, "msg": "", "content": []} try: model = get_activity_model(request) _r["code"] = 0 _r["content"] = [json.loads(model.msg)] except: _r['msg'] = trace_msg() return _r result = activity_action(activity_model, 'query', server_id, msg, request.admin.id, True) result = json.loads(result) # ((0,'未开始'),(1,'关闭成功'),(2,'开启成功'),(3,'服务器配置异常'),) if result["code"] == 0 and result["content"][0]["open"] == False: activity_model.status = 1 elif result["code"] == 0 and result["content"][0]["open"] == True: activity_model.status = 2 else: activity_model.status = 3 activity_model.save() return HttpResponse(json.dumps(result))
def mail_info(request, template='game/mail_info.html'): ''' 查看邮件列表 ''' player_id = int(request.REQUEST.get('player_id', -1)) server_id = int(request.REQUEST.get('server_id', 0)) player_name = request.GET.get('player_name', '') page_num = int(request.GET.get('page_num', 1)) page_size = 20 total_record = 0 gmp = GMProtocol(server_id) err_msg = '' mail_list = [] try: result = gmp.get_mail(player_id, page_num - 1) if result and result.get('n'): total_record = result['n'] mail_list = result['l'] if mail_list and total_record: for mail in mail_list: mail['m']['pl'] = json.dumps(mail['m']['pl'], ensure_ascii=False) mail['rw'] = json.dumps( mail['rw'], ensure_ascii=False) if 'rw' in mail else '' except Exception, e: err_msg = trace_msg()
def role_info(request, player_id=0, template='game/role_info.html'): '''角色信息 ''' player_id = player_id or int(request.REQUEST.get('player_id', 0)) server_id = int(request.REQUEST.get('server_id', 0)) player_name = request.GET.get('player_name', '') gmp = GMProtocol(server_id) def_params = get_player_info_param() err_msg = '' #keji_map = KEJI_MAP #sj_map = SJ_MAP try: gmp.time_out = 10 player_info = gmp.get_player_base_info(player_id) player_info = player_info[1] if not player_info[0] else [] resource_list = gmp.get_player_resource(player_id) if player_info: ##########默认玩家是存在的,不然就报错,player_info=返回[-1] ,历史遗留问题,我就不改 player_info[2] = Occupation_Map[player_info[2]] player_info[5] = HEAD_TITLE[ player_info[5]] if player_info[5] else "" player_info[6] = TRIBE_TITLE[ player_info[6]] if player_info[6] else "" resource_list = resource_list[1] if resource_list else [] except Exception, e: player_info = resource_list = [] err_msg = trace_msg()
def activity_edit(request, model=None, err_msg='', template="game/activity_edit.html"): '''活动编辑 ''' is_copy = request.REQUEST.get('is_copy', '') try: if not model: activity_id = int(request.REQUEST.get('activity_id', '') or 0) model = model or get_activity_model(request) model.id = model.id or 0 if model.id: select_server_ids = [s.id for s in model.server.all()] if is_copy: model.id = 0 msg = json.loads(model.msg) if isinstance(msg, dict): if not msg: return HttpResponse('空配置的活动不能复制.') msg['kid'] = int(time.time()) msg["id"] = 0 model.msg = json.dumps(msg) model.name = '%s-copy' % model.name except Exception, e: err_msg = trace_msg()
def pilot_modify(request, player_id=0): '''武将修改 ''' _r = {"code": -1, "msg": ""} player_id = player_id or int(request.REQUEST.get('player_id', 0)) server_id = int(request.REQUEST.get('server_id', 0)) player_name = request.REQUEST.get('player_name', '') json_msg = request.REQUEST.get('msg', '') msg_wj = json.loads(json_msg) try: if 'wj' in msg_wj: wj_list = msg_wj.get('wj', '') gmp = GMProtocol(server_id) result = gmp.set_pilot_modify(player_id, wj_list) if 'add_wj' in msg_wj: wj_list = msg_wj.get('add_wj', '') gmp = GMProtocol(server_id) result = gmp.add_pilot(player_id, wj_list) _r['msg'] = gmp.rsp_map.get(result, result) _r['code'] = result gmp.save_log(request.admin.id, gmp.req_type, _r['code'], role_name=player_name, remark2=json_msg) except: err_msg = trace_msg() _r['msg'] = err_msg return HttpResponse(json.dumps(_r))
def admin_save(request, admin_id=0): '''管理员保存 ''' try: admin_id = int(request.REQUEST.get('id', '0')) if admin_id: the_admin = request.admin.get_manageable_admin().get(id=admin_id) else: the_admin = Admin() username = request.REQUEST.get('username', '') if not admin_id and Admin.objects.filter(username=username).exists(): err_msg = '已存在相同登录名[%s]' % username else: the_admin.set_attr('username', request.REQUEST.get('username', '').strip(), null=False) the_admin.set_attr('alias', request.REQUEST.get('alias', '').strip(), null=False) the_admin.set_attr('password', request.REQUEST.get('password', '').strip(), the_admin.md5_password, null=False) role_ids = request.REQUEST.getlist('role_id') if role_ids: the_admin.set_attr('role_ids', request.REQUEST.getlist('role_id'), null=True) the_admin.save() else: err_msg = '至少选择一个角色!' except Exception, e: err_msg = trace_msg()
def server_modify(request, server_id=0): '''修改服务器参数 ''' server_ids = list(set(request.REQUEST.getlist('server_id'))) modify_param = request.REQUEST.get('msg', '') remark = '' try: if server_ids: modify_param = json.loads(modify_param) msg, remark = input_server_param_handle(modify_param) print msg servers_len = len(server_ids) if servers_len > 1: poll_num = 100 if servers_len > 100 else servers_len tp = ThreadPool(poll_num) for server_id in server_ids: tp.append(server_modify_action, (request, server_id, msg, remark)) tp.close() result = tp.get_all_result() tp.join() del tp else: server_id = server_ids[0] result = [ server_modify_action(request, server_id, msg, remark) ] return HttpResponse('<br>'.join(result)) except: err_msg = trace_msg() return HttpResponse(err_msg)
def shop_daily_edit(request): ''' 每日限购编辑 ''' MIN_ITEM_ID = 10000 item_id = int(request.GET.get('item_id', 0)) server_id = int(request.GET.get('server_id', 0)) page_num = int(request.GET.get('page_num', 1)) if item_id and item_id <= MIN_ITEM_ID: return HttpResponse("无法修改本地数据(商品ID < 10000)") item = [] server_time = None res_info = None if item_id and server_id: try: gmp = GMProtocol(server_id) server_time = gmp.query_server_time()[0] shop_list, page_sum = gmp.get_shop_list(page_num) item = [i for i in shop_list if i[0] == item_id][0] res_info = convert_res_info(item[14], item[16]) except Exception, e: err_msg = trace_msg()
def role_save(request, id=0): '''角色保存 ''' try: id = int(request.REQUEST.get('id', '0')) if id > 0: role = request.admin.get_resource('role').get(id=id) else: role = Role() role.set_attr('name',request.REQUEST.get('name',''),null=False) role.set_attr('remark',request.REQUEST.get('remark',''),null=True) role.set_attr('type',request.REQUEST.get('type',Role.RoleType.NORMAL),null=False) role.create_resource('menu',request.REQUEST.getlist('menu_id')) role.create_resource('channel',request.REQUEST.getlist('channel_id')) role.create_resource('agent',request.REQUEST.getlist('agent_id')) role.create_resource('server',request.REQUEST.getlist('server_id')) role.create_resource('server_group',request.REQUEST.getlist('server_group_id')) role.create_resource('platform',request.REQUEST.getlist('platform_id')) manager_role_ids = [] # 只有管理员才能管理其他角色 if int(role.type) == Role.RoleType.ADMIN: manager_role_ids = request.REQUEST.getlist('manager_role_id') role.create_resource('role',manager_role_ids) role.save() for r in request.admin.get_roles().filter(type=Role.RoleType.ADMIN): r.add_resource_member('role',role.id) except Exception,e: err_msg = trace_msg()
def remove(self,template='game/player_template_edit.html'): try: ActivityTemplate.objects.filter(id__in=self.ids).delete() msg = '成功!' except: msg = trace_msg() return self.HttpResponse(msg)
def batch_upgrade_save(request): ids = request.REQUEST.getlist('file_id') update_params = {} msg = '' try: if ids: for k in request.REQUEST.keys(): if k == 'file_id': continue value = request.REQUEST.get(k, '') if value: update_params[k] = value msg += '%s:%s' % (k, value) if update_params: print update_params Upgrade.objects.using('write').filter(id__in=ids).update( **update_params) msg += '\n更新成功!' else: msg = '没有更新配置!' else: msg = '没有选择更新' except: msg = trace_msg() return HttpResponse(msg)
def update_player_all(self,s_obj,insert_generators): '''拉取全服的player表 ''' sql = SQL['get_player'].replace('{{server_id}}',str(s_obj.id))\ .replace('{{sdate}}',self.sdate_str)\ .replace('{{edate}}',self.edate_str) try: conn = sm.get_conn(s_obj.id) cur = conn.cursor() BaseQuery.create_tmp_table(conn, s_obj)#先创建一下player_xx_tmp表 #print sql cur.execute(sql) insert_size = 0 while 1: result = cur.fetchmany(50000) if result: insert_size += len(result) _log.debug('%s player_%s has %s inserting....' % (s_obj.name,s_obj.id,insert_size)) try: self._INSERT_LOCK.acquire() insert_generators.send(result) except Exception,e: _log.warning(trace_msg()) finally: self._INSERT_LOCK.release()
def cron_do(): '''定时运行 ''' print 'start cron job !' while True: try: edate = datetime.datetime.now() sdate = edate + datetime.timedelta(days=-1) if edate.hour == 3 and edate.minute == 1: #03:01 start close_connections() sm.update_server_config() #1 更新服务列表 update_dicts() #2 更新渠道列表 CenterPlayer(sdate,edate).start() #3 插入中央服player_all RollPlayer().start() #4 更新滚服 数据 auto_backup_do('daily',sdate,edate) #执行备份 if edate.day == 1 :#每月1号执行的 sdate = get_previous_month_day(edate) edate = edate.replace(day=1) auto_backup_do('monthly',sdate,edate) remove_30ago_dir() post_msg('qq','%s 定时备份完成!' % PREFIX) except Exception,e: _msg = trace_msg() print _msg post_msg('qq','%s 定时备份错误!' % PREFIX,_msg) time.sleep(60)
def run(self,s_obj): ''' ''' try: center_conn = connections['write'] server_conn = sm.get_conn(s_obj.id) insert_server_conn = sm.get_conn(s_obj.id) insert_server_conn.autocommit(False) self.__create_server_player_roll_table(server_conn) self.__create_server_player_roll_table(server_conn) insert_num = 0 for pid,link_key,user_type,create_time in self.__get_roll_player(server_conn,s_obj): roll_num,player_infos = self.__get_center_roll_player(center_conn,link_key,user_type,create_time) if roll_num>0: roll_num -= 1 if roll_num>=1 else 0 self.__insert_player_roll(insert_server_conn,roll_num,player_infos) if roll_num > 0: self.__update_center_roll_num(center_conn,roll_num,pid) insert_num += 1 print '[%s] %s(%s) 更新 %s 条滚服数据' % (datetime.datetime.now(),s_obj.name,s_obj.id,insert_num) server_conn.close() center_conn.close() except Exception,e: _log.warning(trace_msg())
def auth(request, shard_id=0): '''认证完成访问页面 ''' http_protocol = 'https' if request.is_secure() else 'http' access_token = request.REQUEST.get('code', '') try: if shard_id and access_token: Log._meta.db_table = 'log_share' share_model = Log.objects.using('read').get(id=shard_id) share_type = share_model.f4 share_type_cls = get_share_type_cls(share_type) share_type_obj = share_type_cls(request, share_model) return share_type_obj.get_share_result(access_token) except: print trace_msg() return HttpResponse('error')
def log_remove(request, log_id=0): '''删除日志类型 ''' try: log_ids = request.REQUEST.getlist('id') LogDefine.objects.filter(id__in=log_ids).delete() except Exception,e: err_msg = trace_msg()
def roll_broadcast(request, template='game/roll_broadcast.html'): '''滚动公告 ''' server_id = int(request.REQUEST.get('server_id', '') or 0) group_servers_dict = get_group_servers_dict(request) select_server_ids = [server_id] try: if server_id: gmp = GMProtocol(server_id) #server_time = gmp.query_server_time()[0] if request.method == 'POST': json_msg = request.REQUEST.get('msg', '') msg = json.loads(json_msg) _r = {"code": -1, "msg": ""} if request.REQUEST.get('req_type', '') == 'roll_broadcast_del': result = gmp.roll_broadcast_del(msg) else: msg[0]["bc"] = msg[0]["bc"].replace("<br />", "") result = gmp.roll_broadcast_set(msg) _r['code'] = result _r['msg'] = gmp.rsp_map.get(result, result) gmp.save_log(request.admin.id, gmp.req_type, _r['code'], remark1='remark', remark2=json_msg) return HttpResponse(json.dumps(_r)) else: roll_broadcasts = gmp.roll_broadcast_query() server_model = Server.objects.get(id=server_id) else: the_user = request.admin server_list = the_user.get_resource("server").all() # 返回所有正在滚动的公告 roll_broadcasts = [] # for g,servers in group_servers_dict.items(): # for s in servers: for s in server_list: gmp = GMProtocol(s.id) result = gmp.roll_broadcast_query() if result: for i in range(len(result)): result[i]['serverId'] = s.id result[i]['serverName'] = s.name roll_broadcasts.extend(result) # gmp = GMProtocol(7) # roll_broadcasts = gmp.roll_broadcast_query() # print roll_broadcasts # if roll_broadcasts: # roll_broadcasts[0]['serverId'] = 7 # roll_broadcasts[0]['serverName'] = 'test' # server_model = Server.objects.get(id=7) except: err_msg = trace_msg() return render_to_response(template, locals())
def activity_upload(request): '''活动图片上传 ''' #上传登录公告图片 img_path = os.path.join(ACTIVITY_PATH, 'img') rsp = {"msg": "没有图片"} file_ext = '.png' reqfile = request.FILES.get('fileToUpload', None) pid = request.REQUEST.get('pid', '') if reqfile: #创建目录 try: if not os.path.isdir(img_path): os.makedirs(img_path) except Exception, e: return HttpResponse({"msg": "目录错误"}) try: old_img_name, old_ext = os.path.splitext(str(reqfile)) img_name = raw_img_name = hashlib.md5(old_img_name).hexdigest() count = 0 path_name = os.path.join(img_path, img_name) while os.path.isfile(path_name + file_ext): count += 1 img_name = '%s_%s' % (raw_img_name, count) path_name = os.path.join(img_path, img_name) img = Image.open(reqfile) img.save("%s" % path_name + file_ext, "png") # 取消 zip 保存 20160616 # with zipfile.ZipFile(path_name + '.zip', 'w') as zipimg: # zipimg.write(path_name+file_ext, img_name+file_ext) # for python 2.6 # import contextlib # with contextlib.closing(zipfile.ZipFile(path_name + '.zip', 'w')) as zipimg: # zipimg.write(path_name+file_ext, img_name+file_ext) rsp = { "pid": pid, "key": img_name, "msg": "保存成功", } except Exception, e: print trace_msg() return HttpResponse("Error %s" % e)