def get_hot_tags(request): if request.method == 'GET': res = {} token = request.GET.get('token', None) db = MongoConn.find_one('token_ttl', {'token': token}) if not db: tmp = {} tmp['errcode'] = UNLOGIN return HttpResponse( json_util.dumps(tmp, ensure_ascii=False), content_type='application/x-www-form-urlencoded;charset=utf-8') effect_tags = MongoConn.find('effect_tags', None).sort('use_count', DESCENDING).limit(10) summary_tags = MongoConn.find('summary_tags', None).sort('use_count', DESCENDING).limit(10) res['effect_tags'] = [] res['summary_tags'] = [] for tag in effect_tags: res['effect_tags'].append(tag.get('_id', None)) for tag in summary_tags: res['summary_tags'].append(tag.get('_id', None)) res['errcode'] = OK return HttpResponse( json_util.dumps(res, ensure_ascii=False), content_type='application/x-www-form-urlencoded;charset=utf-8')
def update_tags_frequency(effect_tags, summary_tags): if effect_tags: for tag in effect_tags: if MongoConn.find_one('effect_tags', {'_id': str(tag)}): MongoConn.update('effect_tags', {'_id': str(tag)}, {'$inc': { 'use_count': 1 }}) else: res = {} res['_id'] = str(tag) res['use_count'] = 1 MongoConn.insert('effect_tags', res) if summary_tags: for tag in summary_tags: if MongoConn.find_one('summary_tags', {'_id': str(tag)}): MongoConn.update('summary_tags', {'_id': str(tag)}, {'$inc': { 'use_count': 1 }}) else: res = {} res['_id'] = str(tag) res['use_count'] = 1 MongoConn.insert('summary_tags', res)
def del_product_record(request): if request.method == 'POST': res = {} req = json.loads(request.body) logging.info(req) token = req.get('token', None) product_record_id = req.get('product_record_id', None) db = MongoConn.find_one('token_ttl', {'token': token}) if not db: res['errcode'] = UNLOGIN return HttpResponse( json_util.dumps(res, ensure_ascii=False), content_type='application/x-www-form-urlencoded;charset=utf-8') openid = db.get('openid') logging.info(openid) product_record = MongoConn.find_one( 'product_record', {'_id': ObjectId(product_record_id)}) logging.info(product_record) if not product_record: tmp = {} tmp['errcode'] = UNKNOWN return HttpResponse( json_util.dumps(tmp, ensure_ascii=False), content_type='application/x-www-form-urlencoded;charset=utf-8') db_skin_record_id_list = product_record.get('skin_record', None) product_image = product_record.get('image', None) del_server_image(product_image) user_record = MongoConn.find_one('user_record', {'_id': openid}) if not user_record['product_record']: res['errcode'] = UNKNOWN return HttpResponse( json_util.dumps(res, ensure_ascii=False), content_type='application/x-www-form-urlencoded;charset=utf-8') user_record['product_record'].remove(product_record_id) user_record['last_record_time'] = datetime.datetime.utcnow() user_record['product_record_num'] -= 1 user_record['record_pic_num'] -= len(db_skin_record_id_list) MongoConn.save('user_record', user_record) logging.info(user_record) for skin_record_id in db_skin_record_id_list: skin_record = MongoConn.find_one('skin_record', {'_id': ObjectId(skin_record_id)}) skin_image = skin_record.get('pics')[0] del_server_image(skin_image) MongoConn.find_one_and_delete('skin_record', {'_id': ObjectId(skin_record_id)}) MongoConn.find_one_and_delete('product_record', {'_id': ObjectId(product_record_id)}) res['errcode'] = OK return HttpResponse( json_util.dumps(res, ensure_ascii=False), content_type='application/x-www-form-urlencoded;charset=utf-8')
def update_publish_limit(openid, product_record_id, skin_record_id): today = datetime.datetime.now().strftime("%Y%m%d") record_limit = {} record_limit['open_id'] = openid record_limit['product_record_id'] = str(product_record_id) record_limit['skin_record_id'] = str(skin_record_id) record_limit['date'] = today MongoConn.insert('record_limit', record_limit)
def get_compare_pics(request): if request.method == 'GET': res = [] token = request.GET.get('token', None) product_id = request.GET.get('product_id', None) db = MongoConn.find_one('token_ttl', {'token': token}) if not db: tmp = {} tmp['errcode'] = UNLOGIN return HttpResponse( json_util.dumps(tmp, ensure_ascii=False), content_type='application/x-www-form-urlencoded;charset=utf-8') product_record = MongoConn.find_one('product_record', {'_id': ObjectId(product_id)}) if not product_record: tmp = {} tmp['errcode'] = UNKNOWN return HttpResponse( json_util.dumps(tmp, ensure_ascii=False), content_type='application/x-www-form-urlencoded;charset=utf-8') db_skin_record_id_list = product_record.get('skin_record', None) # db_skin_record_id_list.reverse() for skin_record_id in db_skin_record_id_list: skin_record = MongoConn.find_one('skin_record', {'_id': ObjectId(skin_record_id)}) tmp = {} tmp['skin_record_id'] = str(skin_record.get('_id')) tmp['image'] = skin_record.get('pics')[0] tmp['tags'] = skin_record.get('tags') skin_record_db_create_time = skin_record.get('create_time', None) if not skin_record_db_create_time: tmp['create_time'] = None else: skin_record_create_time = skin_record_db_create_time + datetime.timedelta( hours=8) # skin_record_create_time = skin_record_db_create_time tmp['create_time'] = int( time.mktime(skin_record_create_time.timetuple())) res.append(tmp) return HttpResponse( json_util.dumps(res, ensure_ascii=False), content_type='application/x-www-form-urlencoded;charset=utf-8')
def check_publish_limit(openid, product_record_id): today = datetime.datetime.now().strftime("%Y%m%d") res = MongoConn.find_one('record_limit', { 'open_id': openid, 'product_record_id': product_record_id, 'date': today }) if res: return False else: return True
def login(request): if request.method == 'GET': res = {} print(request.GET) logging.info(request.META) logging.info(request.GET) res['name'] = request.GET.get('name', 'defaultname') res['passwd'] = request.GET.get('passwd') return HttpResponse("get method") if request.method == 'POST': res = {} code = request.POST.get('code') logging.info(code) openid, session_key = wechat.get_openid(code) token = wechat.get_token(openid + session_key) res['token'] = token now = datetime.datetime.utcnow() expire_time = now + datetime.timedelta(weeks=1) # expire_time = now + datetime.timedelta(minutes = 60) print(expire_time) token_ttl = {} token_ttl['token'] = token token_ttl['openid'] = openid token_ttl['expire_time'] = expire_time MongoConn.update( 'token_ttl', {'openid': openid}, {'$set': { 'expire_time': expire_time, 'token': token }}, True) # res['user_id'] = openid logging.info(token) return HttpResponse( json_util.dumps(res, ensure_ascii=False), content_type='application/x-www-form-urlencoded;charset=utf-8')
def upload_pic(request): if request.method == 'POST': res = {} logging.info(request.POST) token = request.POST.get('token') pic_name = request.GET.get('name') pic_file = request.FILES.get(pic_name) logging.info(token) db = MongoConn.find_one('token_ttl', {'token': token}) if not db: res['errcode'] = UNLOGIN return HttpResponse( json_util.dumps(res, ensure_ascii=False), content_type='application/x-www-form-urlencoded;charset=utf-8') openid = db.get('openid') logging.info(openid) if not pic_file: res['errcode'] = UNKNOWN return HttpResponse( json_util.dumps(res, ensure_ascii=False), content_type='application/x-www-form-urlencoded;charset=utf-8') # today = datetime.datetime.now().strftime("%Y%m%d%H%M%S") today = datetime.datetime.now().strftime("%Y%m%d") time = datetime.datetime.now().strftime("%H%M%S") logging.info(pic_file.name) tail = '.' + pic_file.name.split('.')[-1] dir_path = os.path.join(BASE_DIR, "common_static", "images", "diary", openid, today).replace('\\', '/') logging.info(dir_path) if not os.path.exists(dir_path): os.makedirs(dir_path) file_path = os.path.join(dir_path, pic_name + time + tail).replace('\\', '/') destination = open(file_path, 'wb+') for chunk in pic_file.chunks(): destination.write(chunk) destination.close() res['errcode'] = OK res['url'] = os.path.join("images", "diary", openid, today, pic_name + time + tail).replace('\\', '/') return HttpResponse( json_util.dumps(res, ensure_ascii=False), content_type='application/x-www-form-urlencoded;charset=utf-8')
def user_record(request): if request.method == 'GET': res = {} token = request.GET.get('token', None) db = MongoConn.find_one('token_ttl', {'token': token}) if not db: res['errcode'] = UNLOGIN return HttpResponse( json_util.dumps(res, ensure_ascii=False), content_type='application/x-www-form-urlencoded;charset=utf-8') openid = db.get('openid') db_record = MongoConn.find_one('user_record', {'_id': openid}) if db_record: res['pic_num'] = db_record.get('record_pic_num', 0) res['day_count'] = db_record.get('record_days_num', 0) res['product_count'] = db_record.get('product_record_num', 0) db_time = db_record.get('last_record_time', None) if db_time: last_record_time = db_time + datetime.timedelta(hours=8) # last_record_time = db_time res['last_record_time'] = int( time.mktime(last_record_time.timetuple())) else: res['last_record_time'] = 0 else: res['pic_num'] = 0 res['day_count'] = 0 res['product_count'] = 0 last_record_time = datetime.datetime.utcnow() + datetime.timedelta( hours=8) res['last_record_time'] = int( time.mktime(last_record_time.timetuple())) return HttpResponse( json_util.dumps(res, ensure_ascii=False), content_type='application/x-www-form-urlencoded;charset=utf-8')
def get_banner(request): if request.method == 'GET': res = [] items = MongoConn.find('banner', None) for item in items: tmp = {} tmp['id'] = item['_id'] tmp['image'] = item['image'] tmp['url'] = item['url'] res.append(tmp) logging.info(tmp) return HttpResponse( json_util.dumps(res, ensure_ascii=False), content_type='application/x-www-form-urlencoded;charset=utf-8')
def user_record_list(request): if request.method == 'GET': res = [] token = request.GET.get('token', None) db = MongoConn.find_one('token_ttl', {'token': token}) if not db: tmp = {} tmp['errcode'] = UNLOGIN return HttpResponse( json_util.dumps(tmp, ensure_ascii=False), content_type='application/x-www-form-urlencoded;charset=utf-8') openid = db.get('openid') product_record_list = MongoConn.find_one('user_record', { '_id': openid }).get('product_record', None) if not product_record_list: return HttpResponse( json_util.dumps(res, ensure_ascii=False), content_type='application/x-www-form-urlencoded;charset=utf-8') # logging.info(product_record_list) product_record_list.reverse() product_record_list_order = {} product_record_list_local = {} for product_record_id in product_record_list: product_record = MongoConn.find_one( 'product_record', {'_id': ObjectId(product_record_id)}) if product_record: product_record_list_local[product_record_id] = product_record db_create_time = product_record.get('create_time', None) db_update_time = product_record.get('update_time', db_create_time) product_record_list_order[product_record_id] = int( time.mktime(db_update_time.timetuple())) product_record_list_ordered = sorted(product_record_list_order.items(), key=lambda x: x[1], reverse=True) logging.info(product_record_list_ordered) for item in product_record_list_ordered: product_record_id = item[0] logging.info(product_record_id) # product_record = MongoConn.find_one('product_record', {'_id' : ObjectId(product_record_id)}) product_record = product_record_list_local[product_record_id] if product_record: # logging.info(product_record) tmp = {} tmp['product_id'] = product_record_id tmp['product_name'] = product_record.get('name', None) tmp['product_image'] = product_record.get('image', None) tmp['product_tags'] = product_record.get('tags', None) db_create_time = product_record.get('create_time', None) if not db_create_time: tmp['create_time'] = None else: create_time = db_create_time + datetime.timedelta(hours=8) tmp['create_time'] = int( time.mktime(create_time.timetuple())) db_update_time = product_record.get('update_time', None) if not db_update_time: tmp['update_time'] = tmp['create_time'] else: update_time = db_update_time + datetime.timedelta(hours=8) tmp['update_time'] = int( time.mktime(update_time.timetuple())) db_skin_record_list = product_record.get('skin_record', None) skin_record_len = len(db_skin_record_list) skin_record_new_id = db_skin_record_list[0] skin_record_old_id = db_skin_record_list[skin_record_len - 1] skin_record_new = MongoConn.find_one( 'skin_record', {'_id': ObjectId(skin_record_new_id)}) skin_record_old = MongoConn.find_one( 'skin_record', {'_id': ObjectId(skin_record_old_id)}) if skin_record_new and skin_record_old: tmp['skin_record'] = {} tmp['skin_record'][ 'skin_record_new_iamge'] = skin_record_new.get( 'pics')[0] skin_record_db_create_time = skin_record_new.get( 'create_time', None) if not skin_record_db_create_time: tmp['skin_record'][ 'skin_record_new_create_time'] = None else: skin_record_new_create_time = skin_record_db_create_time + datetime.timedelta( hours=8) # skin_record_new_create_time = skin_record_db_create_time tmp['skin_record'][ 'skin_record_new_create_time'] = int( time.mktime( skin_record_new_create_time.timetuple())) tmp['skin_record'][ 'skin_record_old_iamge'] = skin_record_old.get( 'pics')[0] skin_record_db_create_time = skin_record_old.get( 'create_time', None) if not skin_record_db_create_time: tmp['skin_record'][ 'skin_record_old_create_time'] = None else: skin_record_old_create_time = skin_record_db_create_time + datetime.timedelta( hours=8) # skin_record_old_create_time = skin_record_db_create_time tmp['skin_record'][ 'skin_record_old_create_time'] = int( time.mktime( skin_record_old_create_time.timetuple())) res.append(tmp) return HttpResponse( json_util.dumps(res, ensure_ascii=False), content_type='application/x-www-form-urlencoded;charset=utf-8')
def upload_skin_record(request): if request.method == 'POST': res = {} req = json.loads(request.body) logging.info(req) token = req.get('token', None) product_record_id = req.get('product_record_id', None) skin_images = req.get('skin_images', None) summary_tags = req.get('summary_tags', None) if not token or not product_record_id or not skin_images or len( skin_images) < 1 or len(skin_images) > 2: res['errcode'] = PARAMERR return HttpResponse( json_util.dumps(res, ensure_ascii=False), content_type='application/x-www-form-urlencoded;charset=utf-8') db = MongoConn.find_one('token_ttl', {'token': token}) if not db: res['errcode'] = UNLOGIN return HttpResponse( json_util.dumps(res, ensure_ascii=False), content_type='application/x-www-form-urlencoded;charset=utf-8') openid = db.get('openid') update_tags_frequency(None, summary_tags) # today = datetime.datetime.now().strftime("%Y%m%d") # if not check_publish_limit(openid, product_record_id): # res['errcode'] = PUBLISHLIMIT # return HttpResponse(json_util.dumps(res,ensure_ascii=False),content_type='application/x-www-form-urlencoded;charset=utf-8') skin_record = {} skin_record['pics'] = skin_images skin_record['tags'] = summary_tags # skin_record['create_time'] = today skin_record['create_time'] = datetime.datetime.utcnow() skin_record_id = MongoConn.insert('skin_record', skin_record) db_product_record = MongoConn.find_one( 'product_record', {'_id': ObjectId(product_record_id)}) db_skin_record_list = db_product_record.get('skin_record', None) if db_skin_record_list: db_skin_record_list.append(str(skin_record_id)) MongoConn.save('product_record', db_product_record) else: res['errcode'] = PARAMERR return HttpResponse( json_util.dumps(res, ensure_ascii=False), content_type='application/x-www-form-urlencoded;charset=utf-8') db_product_record['update_time'] = datetime.datetime.utcnow() MongoConn.save('product_record', db_product_record) update_publish_limit(openid, product_record_id, skin_record_id) days = MongoConn.find('record_limit', { 'open_id': openid }).distinct('date') days_num = len(days) # days_num = MongoConn.distinct('record_limit', 'date', {'open_id' : openid}) logging.info(days_num) user_record = {} user_record['_id'] = openid user_record['product_record_num'] = 1 user_record['record_days_num'] = days_num user_record['record_pic_num'] = len(skin_images) user_record['product_record'] = [] user_record['product_record'].append(str(product_record_id)) user_record['last_record_time'] = datetime.datetime.utcnow() db_record = MongoConn.find_one('user_record', {'_id': openid}) if not db_record: MongoConn.insert('user_record', user_record) else: # days_num = MongoConn.find_one('record_limit', {'openid':openid, 'product_record_id':product_record_id, 'date':date}) db_record['record_days_num'] = days_num db_record['record_pic_num'] += len(skin_images) db_record['last_record_time'] = datetime.datetime.utcnow() MongoConn.save('user_record', db_record) res['errcode'] = OK return HttpResponse( json_util.dumps(res, ensure_ascii=False), content_type='application/x-www-form-urlencoded;charset=utf-8')
def upload_product_record(request): if request.method == 'POST': res = {} # logging.info(request.POST) # token = request.POST.get('token') # product_name = request.POST.get('product_name', None) # product_image = request.POST.get('product_image', None) # product_tags = request.POST.get('product_tags', None) # skin_images = request.POST.get('skin_images', None) # summary_tags = request.POST.get('summary_tags', None) req = json.loads(request.body) logging.info(req) token = req.get('token', None) product_name = req.get('product_name', None) product_image = req.get('product_image', None) product_tags = req.get('product_tags', None) skin_images = req.get('skin_images', None) summary_tags = req.get('summary_tags', None) if not product_name or not product_image or not skin_images or len( skin_images) < 1 or len(skin_images) > 2: res['errcode'] = PARAMERR return HttpResponse( json_util.dumps(res, ensure_ascii=False), content_type='application/x-www-form-urlencoded;charset=utf-8') db = MongoConn.find_one('token_ttl', {'token': token}) if not db: res['errcode'] = UNLOGIN return HttpResponse( json_util.dumps(res, ensure_ascii=False), content_type='application/x-www-form-urlencoded;charset=utf-8') openid = db.get('openid') update_tags_frequency(product_tags, summary_tags) # today = datetime.datetime.now().strftime("%Y%m%d") skin_record = {} skin_record['pics'] = skin_images skin_record['tags'] = summary_tags # skin_record['create_time'] = today skin_record['create_time'] = datetime.datetime.utcnow() skin_record_id = MongoConn.insert('skin_record', skin_record) # tmp_time = MongoConn.find_one('skin_record', {'_id' : ObjectId(skin_record_id)}).get('create_time') + datetime.timedelta(hours = 8) # res['time'] = time.mktime(tmp_time.timetuple()) product_record = {} product_record['name'] = product_name product_record['image'] = product_image product_record['tags'] = product_tags product_record['skin_record'] = [] product_record['skin_record'].append(str(skin_record_id)) product_record['create_time'] = datetime.datetime.utcnow() product_record['update_time'] = datetime.datetime.utcnow() product_record_id = MongoConn.insert('product_record', product_record) update_publish_limit(openid, product_record_id, skin_record_id) # record_limit = {} # record_limit['open_id'] = openid # record_limit['product_record_id'] = str(product_record_id) # record_limit['skin_record_id'] = str(skin_record_id) # record_limit['date'] = today # MongoConn.insert('record_limit', record_limit) days = MongoConn.find('record_limit', { 'open_id': openid }).distinct('date') days_num = len(days) # days_num = MongoConn.distinct('record_limit', 'date', {'open_id' : openid}) logging.info(days_num) user_record = {} user_record['_id'] = openid user_record['product_record_num'] = 1 user_record['record_days_num'] = days_num user_record['record_pic_num'] = len(skin_images) user_record['product_record'] = [] user_record['product_record'].append(str(product_record_id)) user_record['last_record_time'] = datetime.datetime.utcnow() db_record = MongoConn.find_one('user_record', {'_id': openid}) if not db_record: MongoConn.insert('user_record', user_record) else: db_record['product_record_num'] += 1 # days_num = MongoConn.find_one('record_limit', {'openid':openid, 'product_record_id':product_record_id, 'date':date}) db_record['record_days_num'] = days_num db_record['record_pic_num'] += len(skin_images) db_record['product_record'].append(str(product_record_id)) db_record['last_record_time'] = datetime.datetime.utcnow() MongoConn.save('user_record', db_record) res['product_record_id'] = str(product_record_id) res['errcode'] = OK return HttpResponse( json_util.dumps(res, ensure_ascii=False), content_type='application/x-www-form-urlencoded;charset=utf-8')
#!/usr/bin/env python # -*- coding: utf-8 -*- ''' @File : write_mongo.py.py @Author: Fengjicheng @Date : 2019/9/17 @Desc : MongoDB读写函数 ''' import traceback import sys import os sys.path.append(os.path.dirname(os.path.abspath(__file__))) from MongoConn import * my_conn = MongoConn() def check_connected(conn): # 检查是否连接成功 if not conn.connected: raise NameError('stat:connected Error') def insert(table, value): # 可以使用insert直接一次性向mongoDB插入整个列表,也可以插入单条记录,但是'_id'重复会报错 try: check_connected(my_conn) my_conn.db[table].insert(value, continue_on_error=True) except Exception: print(traceback.format_exc())
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } } MONGODB_CONFIG = { 'host': '47.92.165.36', 'port': 27017, 'db_name': 'online', 'username': '******', 'password': '******', } MongoConn.init_conn(MONGODB_CONFIG) MongoConn.db_index() res = [] banner = {} banner['_id'] = 1 banner['image'] = '1.jpg' banner['url'] = 'www.baidu.com' res.append(banner) banner = {} banner['_id'] = 2 banner['image'] = '2.jpg' banner['url'] = 'www.baidu.com' res.append(banner) banner = {} banner['_id'] = 3 banner['image'] = '3.jpg'