def submit_phone(request, dajax): qq = request.POST.get('qq', '') phone = request.POST.get('phone', '') namespace = request.POST.get('namespace', 'PTQN') shop_id = int(request.user.shop_id) is_success = 0 try: # from apps.crm.models import Customer # from apps.ncrm.models import Customer as NCustomer # customer, _ = Customer.objects.get_or_create(shop_id = shop_id, defaults = {'user':request.user, 'nick':request.user.nick, 'tp_status':'untouched', 'jl_use_status':'using'}) from apps.ncrm.models import Customer customer, _ = Customer.objects.get_or_create( shop_id=shop_id, defaults={'nick': request.user.nick}) if qq: customer.qq = qq customer.phone = phone customer.save() # NCustomer.sync_customer_info(customer) CacheAdpter.set(CacheKey.WEB_ISNEED_PHONE % shop_id, 0, 'web', 60 * 60 * 24 * 7) is_success = 1 except Exception, e: log.exception('submit userinfo error, e=%s, shop_id=%s' % (e, request.user.shop_id))
def redirect_sale_link(request): """跳转到推广链接""" sale_link_id = int(request.GET.get('sale_link_id', -1)) a_id = int(request.GET.get('a_id', -1)) shop_id = request.user.shop_id nick = request.user.nick redirect_url = reverse('web_home') sale_link = SaleLink.objects.filter(id=sale_link_id) if sale_link: sale_link = sale_link[0] # 限制链接为指定活动 if a_id != -1: vaild_id_list = MainAds(shop_id=shop_id).get_showad_list() if a_id not in vaild_id_list: return render_to_limited(request, '对不起,您不符合该活动的条件') try: tapi = get_tapi(shop_id=shop_id) top_obj = tapi.fuwu_sale_link_gen(nick=nick, param_str=sale_link.param_str) if top_obj and hasattr(top_obj, 'url'): redirect_url = top_obj.url except Exception, e: log.exception('fuwu_sale_link_gen, nick=%s, e=%s' % (nick, e)) return render_to_error(request, '生成链接失败,请联系顾问')
def backend_login(request): top_dict = {} top_dict.update(request.REQUEST) # URL合法性校验 check_result = jl_check_sign_with_secret(top_dict, timeout=60 * 60) if check_result == 'no_permission': return HttpResponse('非法访问,您没有访问权限') elif check_result == 'timeout': return HttpResponse('非法访问,请求超时') elif not top_dict.has_key('shop_id'): return HttpResponse('非法访问,请求参数错误') auth_logout(request) try: # 模拟登陆 is_agent = (top_dict.get('user_type', 'staff') == 'agent') visit_dict = { 'nick': top_dict['nick'], 'session': top_dict['session'], 'visitor_from': top_dict['visitor_from'] } request.session['psuser_name'] = top_dict['psuser_name'] request.session['user_type'] = top_dict['user_type'] return for_user_login(request, visit_dict, is_backend=(not is_agent), is_agent=is_agent) except Exception, e: log.exception( "backend_login exception, nick=%s, session=%s, visitor_from=%s, error=%s" % (top_dict['nick'], top_dict['session'], top_dict['visitor_from'], e)) return render_to_limited(request, '模拟登陆开车精灵发生系统错误')
def sub_port(request): top_dict = {} top_dict.update(request.REQUEST) # URL合法性校验 if not top_dict: return render_to_limited(request, '您的登录方式有误,请重新登陆您的管理后台,然后点击开车精灵的图标') check_result = jl_check_sign_with_secret(top_dict, timeout=60 * 6) if check_result == 'no_permission': return render_to_limited(request, '您没有使用权限,请订购后重新登录') elif check_result == 'timeout': return HttpResponse('请求超时,请重新进入') log.info("LOGIN sub_port, nick=%s, from=%s" % (top_dict['visitor_nick'], top_dict['visitor_from'])) auth_logout(request) try: # 执行登陆 visit_dict = { 'nick': top_dict['visitor_nick'], 'session': top_dict['top_session'], 'visitor_from': top_dict['visitor_from'] } return for_user_login(request, visit_dict) except Exception, e: log.exception( "sub_port exception, nick=%s, session=%s, visitor_from=%s, error=%s" % (top_dict['visitor_nick'], top_dict['top_session'], top_dict['visitor_from'], e)) return render_to_limited(request, '登陆开车精灵发生系统错误')
def paginate_for_sql(count_sql, query_sql, page_no, page_size, all_count = None, recount = False): ''' \根据SQL分页查询数据 count_sql格式:SELECT %s FROM auth_user order by shop_id query_sql格式:SELECT username FROM auth_user order by shop_id \注意:1)要保证django/core/paginator.py中有后来添加的for_sql函数 2)只有page_no=1或recount=True(需要每次都计算)的时候,才计算all_count, \其它情况需传入all_count(从page_obj.paginator.count中获取),因此当翻页查询后,还有添加、删除操作时,应该设置recount=True ''' this_page = None if page_no < 1 or page_size < 1 or not count_sql or not query_sql: return this_page try: if page_no == 1 or recount: count_sql = count_sql % ("count(*) all_count") all_count = execute_query_sql(count_sql)[0]["all_count"] query_sql += " LIMIT %s OFFSET %s" % (page_size, (page_no - 1) * page_size) data_list = execute_query_sql(query_sql) try: paginator = Paginator(data_list, page_size) this_page = paginator.page(1) this_page.for_sql(page_no, all_count) except (EmptyPage, InvalidPage): this_page = paginator.page(1) this_page.for_sql(1, all_count) except Exception, e: log.exception("page_no=%s, page_size=%s, all_count=%s, e=%s" % (page_no, page_size, all_count, e)) raise e
def __call__(self, time_scope, cycle, indicators, psusers, is_force=False): psusers = list(psusers) indicators = [ IndicatorManager.get_indicator(indicator_name) for indicator_name in indicators ] time_scope_list = TimeSpliter(cycle)(time_scope) try: loader = Loader(psusers, *time_scope) staff_mapping = loader.loading(indicators, is_force) all_result = collections.OrderedDict() for psuser in psusers: statis_data = [] if len(time_scope_list) > 1: result = StatisticsHelper([psuser], indicators, *time_scope)(staff_mapping) statis_data.append(result) for start_time, end_time in time_scope_list: result = StatisticsHelper([psuser], indicators, start_time, end_time)(staff_mapping) statis_data.append(result) all_result[psuser] = statis_data if len(time_scope_list) > 1: time_scope_list.insert(0, time_scope) return all_result, time_scope_list, indicators except Exception, e: log.exception('ncrm_guidance2 error, %s' % e) return {}, [], []
def execute_manage_sql(sql, value_list = None): ''' \传入SQL执行插入、更新、删除、truncate操作,返回操作成功的记录条数 replace说明:因为replace会先删除已存在的原记录,再插入记录,因此objs以及其对应的table必须满足如下条件才能调用: 1、objs对象的属性不能被其他Model作为外键引用 2、objs对象必须有单一主键或唯一索引 3、objs对象的主键不能是自增长的id value_list、auto_commit可以为空,auto_commit=False时,需要在该函数外面做数据库提交 ''' script_type = None if sql: script_type = sql.lstrip() script_type = script_type[0:script_type.find(" ")].lower() try: if script_type in ["insert", "update", "delete", "truncate", "drop", "alter", "replace"]: # SQL语句格式:"UPDATE bar SET foo = 1 WHERE baz = %s AND name = %s" cursor = connection.cursor() if not value_list: cursor.execute(sql) else: cursor.execute(sql, value_list) # if auto_commit: # transaction.commit_unless_managed() return cursor.rowcount else: raise SQLException, "SQL syntax error:[%s]" % sql except Exception, e: log.exception("SQL Statement execute error, e=%s" % (e)) raise e
def quick_oper(request, dajax): """触发页面上的“加大投入/减小投入”""" try: shop_id = int(request.user.shop_id) campaign_id = int(request.POST['campaign_id']) stgy = int(request.POST['stgy']) opter, opter_name = analysis_web_opter(request) mnt_campaign = MntCampaign.objects.get(campaign_id=campaign_id) if not mnt_campaign.quick_optime or not time_is_someday( mnt_campaign.quick_optime): MntTaskMng.generate_quickop_task( shop_id=mnt_campaign.shop_id, campaign_id=mnt_campaign.campaign_id, mnt_type=mnt_campaign.mnt_type, stgy=stgy) # 不管执行成功或者失败,都不让再操作 mnt_campaign.quick_optime = datetime.datetime.now() mnt_campaign.save() dajax.script('PTQN.mnt.quick_oper_back(%s);' % (stgy)) else: dajax.script('PTQN.mnt.quick_oper_back(0);') stgy_name = '加大投入' if stgy == 1 else '减小投入' opt_type = 15 if stgy == 1 else 16 opt_desc = '对托管的宝贝%s' % (stgy_name) mnt_quick_oper_log(shop_id, campaign_id, [], opt_desc, opter=opter, opter_name=opter_name) except Exception, e: log.exception( 'mnt quick oper error, shop_id=%s, campaign_id=%s, e=%s' % (request.user.shop_id, campaign_id, e)) dajax.script('PTQN.mnt.quick_oper_back(0);')
def quick_oper(request): '''触发页面上的“加大投入/减小投入”''' try: shop_id = int(request.user.shop_id) campaign_id = int(request.POST['campaign_id']) adg_id_list = request.POST.getlist("adg_id_list[]") adg_id_list = [int(adg_id) for adg_id in adg_id_list] stgy = int(request.POST['stgy']) opter, opter_name = analysis_web_opter(request) mnt_campaign = MntCampaign.objects.get(campaign_id = campaign_id, shop_id = shop_id) now = datetime.datetime.now() result = 1 if adg_id_list: MntTaskMng.generate_quickop_task(shop_id = mnt_campaign.shop_id, campaign_id = mnt_campaign.campaign_id, mnt_type = mnt_campaign.mnt_type, stgy = stgy, adgroup_id_list = adg_id_list) adg_coll.update({'shop_id': shop_id, 'campaign_id':campaign_id, '_id':{'$in': adg_id_list}}, {'$set':{'quick_optime': now}}, multi = True) else: if not mnt_campaign.quick_optime or not time_is_someday(mnt_campaign.quick_optime): MntTaskMng.generate_quickop_task(shop_id = shop_id, campaign_id = mnt_campaign.campaign_id, mnt_type = mnt_campaign.mnt_type, stgy = stgy) mnt_campaign.quick_optime = now mnt_campaign.save() else: result = 2 # 写入操作记录 stgy_name = '加大投入' if stgy == 1 else '减小投入' opt_type = 15 if stgy == 1 else 16 adg_ids = '、'.join([str(adg_id) for adg_id in adg_id_list]) mnt_quick_oper_log(shop_id, campaign_id, adg_id_list, stgy_name, opter = opter, opter_name = opter_name) if adg_id_list: return {'errMsg':'', 'result':result, 'stgy':stgy, 'adg_id_list':adg_id_list} else: return {'errMsg':'', 'result':result, 'stgy':stgy} except Exception, e: log.exception('mnt quick oper error, shop_id=%s, campaign_id=%s, e=%s' % (request.user.shop_id, campaign_id, e)) return {'errMsg':e, 'result':0, 'stgy':stgy}
def split_title_from_cat(cls, cat_item_dic): title_list = [] try: for _, items in cat_item_dic.items(): for item in items: new_title = cls.generate_title(item[1]) title_list.append((item[0], new_title)) except Exception, e: log.exception('error:%s' % (e))
def process(self): """ Process the dajax request calling the apropiate method. """ if self.is_callable(): # 1. get the function thefunction = self.get_ajax_function() # 2. call the function try: response = thefunction(self.request) if isinstance(response, Dajax): return response.render() else: return response except Exception, e: log.exception("dajax error, e=%s" % (e)) # added by hehao # Development Server Debug if settings.DEBUG and DajaxRequest.get_dajax_debug(): import traceback from dajax.utils import print_green_start, print_blue_start, print_clear, print_red print_green_start() print "#" * 50 print "uri: %s" % self.request.build_absolute_uri() print "function: %s" % self.full_name print "#" * 50 print "" print_red(str(e)) print_blue_start() traceback.print_exc(e) print_clear() # If it's an ajax request we need soft debug # http://docs.djangoproject.com/en/dev/ref/request-response/#django.http.HttpRequest.is_ajax if self.request.is_ajax(): # If project was in debug mode, alert with Exception info # if settings.DEBUG:#modified by hehao if True: response = Dajax() # response.alert('Exception %s: Check %s manually for more information or your server log.' % (str(e), self.request.get_full_path())) response.alert(u'亲,出错啦,请联系您的顾问!') return response.render() # If not, check DAJAX_ERROR_CALLBACK, if present call this function # elif DajaxRequest.get_dajax_error_callback() != None:#modified by hehao if DajaxRequest.get_dajax_error_callback() != None: response = Dajax() response.script( DajaxRequest.get_dajax_error_callback() % str(e)) return response.render() # Otherside ... raise Exception else: raise # If it's a non-ajax request raise Exception, Django cares. else: raise
def add_new_item(request): '''全自动将新宝贝添加为托管 1. 将增加的宝贝添加为广告组 2. 将添加成功的广告组,设置成托管宝贝[注意数量限制],并且还要保存托管设置 3. 添加成功的宝贝,只提示个数;添加失败的宝贝,要提示原因 ''' errMsg = '' msg = '' result = {} opter, opter_name = analysis_web_opter(request) def add_items_common(shop_id, campaign_id, new_item_dict): """给定item_title_list来添加宝贝""" item_arg_list, added_id_list, failed_item_dict = [], [], {} if new_item_dict: tapi = get_tapi(request.user) item_list = Item.get_item_by_ids(shop_id = shop_id, item_id_list = new_item_dict.keys(), tapi = tapi, transfer_flag = True) # 从淘宝获取标准的item数据 temp_item_dict = {} # 获取部分宝贝信息 for item in item_list: # 绑定创意标题 added_item = new_item_dict.get(item['_id'], {}) if not added_item: continue item.update({'adgroup': {'title': TitleTransfer.remove_noneed_words(added_item['title1']), 'img_url': added_item['img_url1']}, 'creative': {'title': TitleTransfer.remove_noneed_words(added_item['title2']), 'img_url': added_item['img_url2']}, }) item_arg_list.append(item) temp_item_dict.update({item['_id']:[item['pic_url'], item['title']]}) if item_arg_list: # 导入宝贝 added_id_list, error_msg_dict = add_adgroups(shop_id = shop_id, campaign_id = campaign_id, item_arg_list = item_arg_list, tapi = tapi, opter = opter, opter_name = opter_name) for item_id, error_msg in error_msg_dict.items(): temp_item_info = temp_item_dict.get(item_id, ('', '')) failed_item_dict.update({item_id:(temp_item_info[0], temp_item_info[1], error_msg)}) del temp_item_dict return added_id_list, failed_item_dict shop_id = int(request.user.shop_id) camp_id = int(request.POST['camp_id']) new_item_dict = json.loads(request.POST['new_item_dict']) new_item_dict = {int(item_id):adg_crt for item_id, adg_crt in new_item_dict.items()} mnt_type = int(request.POST.get('mnt_type', 0)) try: success_adg_id_list, failed_item_dict = add_items_common(shop_id = shop_id, campaign_id = camp_id, new_item_dict = new_item_dict) msg = '添加成功 %s 个宝贝%%s,添加失败 %s 个宝贝!' % (len(success_adg_id_list), len(failed_item_dict)) result['success_count'] = len(success_adg_id_list) result['failed_count'] = len(failed_item_dict) except Exception, e: success_adg_id_list, failed_item_dict = [], {} log.exception('add items2 error, shop_id=%s, campaign_id=%s, e=%s' % (shop_id, camp_id, e)) msg = '添加成功 %s 个宝贝%%s,添加失败 %s 个宝贝!' % (0, len(new_item_dict)) errMsg = "未知错误"
def sort_column(value): # 因为table_sort是按字符串来排序的,导致20大于100。所以在20前面补0。 try: if value: return mark_safe('<span class="hide">%012.2f</span>%s' % (float(value), value)) else: return value except Exception, e: log.exception("sort_column(value=%s) raise error=%s" % (value, e)) return mark_safe('<span class="hide">%s</span>%s' % (value, value))
def bulk_update_for_model(obj_list, commit_number = 1000): '''批量更新model_list数据,按照commit_number将obj_list分组批量更新''' for temp_list in genr_sublist(obj_list, commit_number): try: for obj in temp_list: obj.save(False, False) transaction.commit() except Exception, e: log.exception("Object save error, e=%s" % (e)) transaction.rollback() raise e
def main(): scheduler = BlockingScheduler() for job in JOB_LIST: if callable(job['func']): scheduler.add_job(**job) try: scheduler.start() except Exception, e: log.exception("scheduler quit with exception, e=%s" % e)
def get_duplicate_task(error_msg): '''获取异步接口的task_id''' task_id = 0 try: sub_msg = (eval(error_msg))['error_response']['sub_msg'] pattern = re.compile('TaskId=(?P<x>\d*)', re.M | re.U | re.I) match_list = pattern.findall(sub_msg) if match_list and match_list[0]: task_id = int(match_list[0]) except Exception, e: log.exception("parse task_id failed, error_msg=%s, e=%s" % (error_msg, e))
def route_ajax(request): '''ajax路由函数,返回数据务必返回字典的格式''' function_name = request.POST.get('function', '') call_back = request.GET.get('callback') try: if function_name and globals().get(function_name, ''): data = globals()[function_name](request=request) else: log.exception("route_ajax: function_name Does not exist") data = {'error': 'function_name Does not exist'} except Exception, e: log.exception("route_ajax error, e=%s ,request_data=%s" % (e, request.POST))
def remove_noimp_same_wd2(cat_id, wd_list): # 对这些关键词进行排序,去掉没有流量的关键词 log.info('combine words,new extended words num:%s' % len(wd_list)) wd_list = check_kw_2save_inDB(wd_list) # wdcat_list = [{'word':word, 'cat_id':cat_id} for word in wd_list] keyword_list = [] # 找出类目下有流量的关键词 try: # temp_dict = get_catsworddata(cat_id, wd_list, datetime.datetime.strftime(datetime.datetime.now() - datetime.timedelta(days = 7), "%Y-%m-%d"), time.strftime("%Y-%m-%d")) temp_dict = get_kw_g_data(wd_list) except Exception, e: log.exception("remove_noimp_same_wd2 error, e=%s" % e) temp_dict = {}
def bulk_update_for_sql(sql, value_list, commit_number = 1000): '''批量执行sql语句保存数据,按照commit_number将value_list分组批量更新''' rowcount = 0 for group_value_list in genr_sublist(value_list, commit_number): if group_value_list: try: cursor = connection.cursor() for temp_list in group_value_list: rowcount += cursor.executemany(sql, temp_list) # sql语句里的字符串型参数 %s 两旁不加引号! transaction.commit() except Exception, e: log.exception("SQL update error, e=%s" % (e)) transaction.rollback() raise e
def route_ajax(request): '''ajax路由函数,返回数据务必返回字典的格式''' if not request.user.is_authenticated(): return {'errMsg':'您已经退出,请重新登录之后再试'} function_name = request.POST.get('function', '') call_back = request.GET.get('callback') try: if function_name and globals().get(function_name, ''): data = globals()[function_name](request = request) else: log.exception("route_ajax: function_name Does not exist") data = {'error': 'function_name Does not exist'} except Exception, e: log.exception("route_ajax error, e=%s ,request_data=%s" % (e, request.POST))
def get_rpt_detail(request): """获取报表明细""" def format_report(rpt): return { 'impr': rpt.impressions, 'click': rpt.click, 'ctr': '%.2f' % rpt.ctr, 'cpc': '%.2f' % (rpt.cpc / 100.0), 'cost': '%.2f' % (rpt.cost / 100.0), 'pay': '%.2f' % (rpt.pay / 100.0), 'paycount': rpt.paycount, 'favcount': rpt.favcount, 'roi': '%.2f' % rpt.roi, 'conv': '%.2f' % rpt.conv, 'carttotal': rpt.carttotal, 'pay_cost': '%.2f' % (rpt.pay_cost / 100.0), 'avg_pay': '%.2f' % (rpt.avg_pay / 100.0) } shop_id = int(request.user.shop_id) errorMsg = '' rpt_list = [] type_model_dict = {'account': [Account, 'shop_id', 0]} try: obj_type = 'account' start_date = request.POST['start_date'] end_date = request.POST['end_date'] obj_args = type_model_dict[obj_type] query_dict = {"shop_id": shop_id} # 每日数据 snap_list = obj_args[0].Report.get_snap_list( query_dict, start_date=start_date, end_date=end_date).values() if snap_list: snap_list = snap_list[0] snap_list.reverse() for rpt in snap_list: dt = rpt.pop('date').strftime('%Y-%m-%d') temp_dict = {'date': dt, 'summed': format_report(rpt)} rpt_list.append(temp_dict) except Exception, e: errorMsg = '未获取到数据,请联系顾问' log.exception("get_rpt_detail error, shop_id=%s, e=%s" % (shop_id, e))
def __insert_for_dict(table_name, field_string, field_list, objs): '''将field_list对应的字典list objs批量插入''' values_list = [] for obj in objs: for field_name in field_list: field_value = obj[field_name] values_list.append(field_value) arg_string = ', '.join([u'(' + ', '.join(['%s'] * len(field_list)) + ')'] * len(objs)) sql = "INSERT INTO %s (%s) VALUES %s" % (table_name, field_string, arg_string,) try: cursor = connection.cursor() cursor.execute(sql, values_list) # transaction.commit_unless_managed() except Exception, e: log.exception("SQL Statement execute error, e=%s" % (e)) raise e
def route_ajax(request): """ajax路由函数,返回数据务必返回字典的格式""" function_name = request.POST.get('function', '') call_back = request.GET.get('callback') try: if function_name and globals().get(function_name, ''): data = globals()[function_name](request=request) else: log.exception("route_ajax: function_name Does not exist") data = {'error': 'function_name Does not exist'} except Exception, e: log.exception("route_ajax error, e=%s ,request_data=%s" % (e, request.POST)) if 'AnonymousUser' in str(e): data = {'errMsg': '会话已过期,请重新登录!'} else: data = {'errMsg': '未知错误,请联系顾问!'}
def redirect_generate_link(request): """生成推荐链接""" shop_id = request.user.shop_id nick = request.user.nick template_id = int(request.GET.get('temp_id', 0)) order_temp = OrderTemplate.get_ordertemplate_byid(template_id) redirect_url = "" if order_temp: try: tapi = get_tapi(shop_id=shop_id) if order_temp.is_base: from apps.web.point import Renewal Renewal.add_point_record(shop_id=shop_id, template_id=order_temp.id) redirect_url = order_temp.generate_order_link(nick, tapi) except Exception, e: log.exception('fuwu_sale_link_gen, nick=%s, e=%s' % (nick, e)) return render_to_error(request, '生成链接失败,请联系顾问')
def execute_query_sql(sql, value_list = None, model_class = None): ''' \传入SQL执行数据库查询操作,返回结果可以是dict_list,也可以是model_list; value_list、model_class可以为空,model_class=None时,返回dict_list; model_class为模型对象时,返回model_list,如果model_class不包含ResultSet的属性,则会将该属性加入到model对象中; \查询时取了所有结果,如果数据量太大,需要在SQL语句中包含limit分页; \该函数用于替代RawSQL,但不同的是调用会立即执行查询,如果真的想只在使用对象时查询,就可以使用RawSQL,其它情况下慎用 ''' script_type = None if sql: script_type = sql.lstrip() script_type = script_type[0:script_type.find(" ")].lower() try: if script_type == "select": # SQL语句格式:"SELECT foo FROM bar WHERE baz = %s AND name = %s LIMIT %s, %s" cursor = connection.cursor() if not value_list: cursor.execute(sql) else: cursor.execute(sql, value_list) # 得到查询的列属性和结果 descr = cursor.description result_set = cursor.fetchall() # 将结果组装为字典列表 if model_class == None: return [dict(zip([column[0] for column in descr], row)) for row in result_set] # 将结果组装为模型列表 else: model_obj_list = [] for row in result_set: model_obj = model_class() tuple_kv_list = zip([column[0] for column in descr], row) for tuple_kv in tuple_kv_list: setattr(model_obj, tuple_kv[0], tuple_kv[1]) model_obj_list.append(model_obj) return model_obj_list else: raise SQLException, "SQL syntax error:[%s]" % sql except Exception, e: log.exception("SQL Statement execute error, e=%s" % (e)) raise e
def update_waiting_creative(cls, id, shop_id, title, file_item, opter, opter_name): """更新排队中的创意""" from apilib.binder import FileItem from bson.objectid import ObjectId try: # 将图片上传到图片空间 tapi = get_tapi(shop_id=shop_id) _, picture_path = cls.upload_picture(tapi, shop_id, file_item) ccrt = ccrt_coll.find_one({"_id": ObjectId(id)}) ccrt_coll.update( {'_id': ObjectId(id)}, {'$set': { 'title': title, 'img_url': picture_path }}) if ccrt['title'] != title: detail_list = ['修改创意:%s --> %s' % (ccrt['title'], title)] else: detail_list = ['修改创意:%s' % (title)] adgroup = Adgroup.objects.get(shop_id=ccrt['shop_id'], adgroup_id=ccrt['adgroup_id']) record_list = [{ 'shop_id': ccrt['shop_id'], 'campaign_id': ccrt['campaign_id'], 'adgroup_id': ccrt['adgroup_id'], 'item_name': adgroup.item.title, 'detail_list': detail_list, 'op_type': 3, 'data_type': 303, 'opter': opter, 'opter_name': opter_name }] if record_list: rcd_list = [UploadRecord(**record) for record in record_list] UploadRecord.objects.insert(rcd_list) return True except Exception, e: log.exception(e) return False
def __create_waiting_creative(cls, **args): try: field_list = [ 'shop_id', 'campaign_id', 'num_iid', 'adgroup_id', 'title', 'img_url' ] args_dict = { item: args[item] for item in field_list if item in args } args_dict['status'] = 0 args_dict['create_time'] = datetime.datetime.now() custom_creative = cls.objects.create(**args_dict) adg_coll.update( { 'shop_id': args['shop_id'], '_id': args['adgroup_id'] }, {'$set': { 'creative_test_switch': True }}) adgroup = Adgroup.objects.get(shop_id=args['shop_id'], adgroup_id=args['adgroup_id']) detail_list = ['添加创意:%s' % custom_creative.title] record_list = [{ 'shop_id': args['shop_id'], 'campaign_id': args['campaign_id'], 'adgroup_id': args['adgroup_id'], 'item_name': adgroup.item.title, 'detail_list': detail_list, 'op_type': 3, 'data_type': 301, 'opter': args['opter'], 'opter_name': args['opter_name'] }] if record_list: rcd_list = [UploadRecord(**record) for record in record_list] UploadRecord.objects.insert(rcd_list) return custom_creative except Exception, e: log.exception(e) return False
def create_complate_creative(cls, creative): '''创建一个投放完成的创意''' try: field_list = [ 'shop_id', 'campaign_id', 'num_iid', 'adgroup_id', 'creative_id', 'title', 'img_url', 'rpt_list' ] args_dict = { item: getattr(creative, item) for item in field_list if hasattr(creative, item) } args_dict['status'] = 1 args_dict['start_time'] = creative.create_time args_dict['create_time'] = datetime.datetime.now() custom_creative = cls.objects.create(**args_dict) return custom_creative except Exception, e: log.exception(e) return False
def route_dajax(request): '''dajax路由函数''' auto_hide = int(request.POST.get('auto_hide', 1)) dajax = Dajax() if auto_hide: dajax.script("PTQN.hide_loading();") function_name = request.POST.get('function') if function_name and globals().get(function_name, ''): dajax = globals()[function_name](request=request, dajax=dajax) else: dajax = log.exception("route_dajax: function_name Does not exist") return dajax
def main(): try: fw_coll = FuwuOrder._get_collection() fw_coll.remove({'pay_status': 1}, multi=True) all_count = fw_coll.find({}).count() i = 0 del_count = 0 for doc in fw_coll.find({}): i += 1 nick = doc.get('nick') if nick: cust = Customer.objects.filter(nick=doc['nick']) if cust: exist_sub = Subscribe.objects.filter( shop_id=cust[0].shop_id, article_code=doc['article_code'], create_time__gte=doc['create_time']) if exist_sub: fw_coll.remove(doc['_id']) del_count += 1 print 'delelte id: ', doc['_id'] print '进度:%s / %s,已删 %s' % (i, all_count, del_count) except Exception, e: log.exception('%s', e)