def get_display_setting(): """ :param user_id: 媒体为管理端(系统)所有时需要传入user_id = 0 :return: """ tid = request.argget.all("id") s, r = arg_verify([("id", tid)], required=True) if not s: return r data = {} theme_name = request.argget.all("theme_name") s, r = arg_verify([(gettext("theme name"), theme_name)], required=True) if not s: return r display_setting = mdbs["sys"].db.theme_display_setting.find_one( {"_id": ObjectId(tid), "theme_name": theme_name}) if display_setting: display_setting["_id"] = str(display_setting["_id"]) if "url" in display_setting and display_setting["url"]: display_setting["url"] = get_file_url(display_setting["url"]) data["media"] = display_setting data["theme_name"] = theme_name return data
def category_add(user_id=None): if user_id is None: user_id = current_user.str_id ntype = request.argget.all('type') name = request.argget.all('name', '') s, r = arg_verify([(gettext("category type"), ntype)], only=get_config("category", "CATEGORY_TYPE").values()) if not s: return r s1, v = short_str_verifi(name, "class_name") s2, r2 = arg_verify( reqargs=[ (gettext("name"), name), ], required=True, max_len=int( get_config( "category", "CATEGORY_MAX_LEN"))) if not s1: data = {"msg": v, "msg_type": "w", "http_status": 422} elif not s2: data = r2 elif mdb_web.db.category.find_one({"type": ntype, "user_id": user_id, "name": name}): data = { "msg": gettext("Name already exists"), "msg_type": "w", "http_status": 403} else: mdb_web.db.category.insert_one( {"type": ntype, "user_id": user_id, "name": name}) data = { "msg": gettext("Add a success"), "msg_type": "s", "http_status": 201} return data
def get_display_settings(): """ :return: """ keyword = request.argget.all("keyword") category_id = request.argget.all("category_id") ctype = request.argget.all("ctype") page = str_to_num(request.argget.all("page", 1)) pre = str_to_num(request.argget.all("pre", 12)) sort = json_to_pyseq(request.argget.all('sort')) theme_name = request.argget.all("theme_name") s, r = arg_verify([(gettext("type"), ctype)], only=get_config("category", "CATEGORY_TYPE").values()) if not s: return r s, r = arg_verify([(gettext("theme name"), theme_name)], required=True) if not s: return r data = {} if category_id: if category_id == "default": category_id = {"$in": [None, ""]} query = {"category_id": category_id, "type": ctype} else: query = {"type": ctype} if keyword: k_rule = {"$regex": keyword, "$options": "$i"} query["$or"] = [{"name": k_rule}, {"title": k_rule}, {"link": k_rule}, {"text": k_rule}] query["theme_name"] = theme_name # sort if sort: for i, srt in enumerate(sort): sort[i] = (list(srt.keys())[0], list(srt.values())[0]) else: sort = [("time", -1)] display_settings = mdbs["sys"].db.theme_display_setting.find(query) data_cnt = display_settings.count(True) display_settings = list(display_settings.sort( sort).skip(pre * (page - 1)).limit(pre)) for d in display_settings: d["_id"] = str(d["_id"]) if "url" in d and d["url"]: d["url"] = get_file_url(d["url"]) data["medias"] = datas_paging( pre=pre, page_num=page, data_cnt=data_cnt, datas=display_settings) data["theme_name"] = theme_name return data
def add_page(): routing = request.argget.all('routing') content = request.argget.all('content', "") ctype = request.argget.all('type', 'html') s, r = arg_verify(reqargs=[(gettext("file type"), ctype)], only=["html"], required=True) if not s: return r if ctype == "html": dirname = "pages" else: dirname = "static" regex_filter = r"(osr/|osr-admin/)" s, r = arg_verify(reqargs=[(gettext("routing"), routing)], required=True) if not s: data = r elif re.search(regex_filter, routing): data = {"msg":gettext("This route can not be used"), "msg_type":"w", "http_status":403} else: filename = os.path.split(routing)[-1] path = "{}/{}/{}/{}".format(THEME_TEMPLATE_FOLDER, get_config("theme", "CURRENT_THEME_NAME"), dirname, os.path.split(routing)[0]).replace("//", "/") # 是否存在同名的目录 relative_path = "{}/{}".format(path, filename) if os.path.exists(relative_path): data = {"msg":gettext("This route can not be used"), "msg_type":"w", "http_status":403} return data # 是否存在同名的html文件 file = "{}/{}.{}".format(path, filename, ctype) if os.path.exists(file): data = {"msg":gettext("Routing existing"), "msg_type":"w", "http_status":403} return data if not os.path.exists(path): os.makedirs(path) with open(file, "w") as wf: wf.write(content) # 记录 mdb_sys.db.theme.update_one({"theme_name": get_config("theme", "CURRENT_THEME_NAME")}, {"$addToSet":{"custom_pages":"{}.{}".format(filename, ctype)}}, upsert=True) data = {"msg":gettext("Added successfully"), "msg_type":"s", "http_status":201, "url":"/{}".format(routing.strip("/"))} return data
def get_display_setting(): ''' :param user_id: 媒体为管理端(系统)所有时需要传入user_id = 0 :return: ''' user_id = 0 id = request.argget.all("id") s, r = arg_verify([("id", id)], required=True) if not s: return r data = {} display_setting = mdb_sys.db.theme_display_setting.find_one({ "_id": ObjectId(id), "user_id": user_id }) if display_setting: display_setting["_id"] = str(display_setting["_id"]) if "url" in display_setting and display_setting["url"]: display_setting["url"] = get_file_url(display_setting["url"]) data["media"] = display_setting return data
def get_url(): ''' 获取一个url信息 :return: ''' id = request.argget.all("id") s, r = arg_verify([("id", id)], required=True) if not s: return r url = mdb_sys.db.sys_urls.find_one({"_id": ObjectId(id)}) if url: url["_id"] = str(url["_id"]) if "OPTIONS" in url["methods"]: url["methods"].remove("OPTIONS") if "HEAD" in url["methods"]: url["methods"].remove("HEAD") data = {"url": url} else: data = { "msg": gettext("No relevant data found"), "msg_type": "w", "http_status": 404 } return data
def user_edit(): ''' 用户编辑 :return: ''' id = request.argget.all('id') role_id = request.argget.all('role_id') active = str_to_num(request.argget.all('active', 0)) s, r = arg_verify(reqargs=[("id", id), ("role_id", role_id)], required=True) if not s: return r data = {'msg': gettext("Update success"), 'msg_type': "s", "http_status":201} update_data = { 'role_id': role_id, 'active': active, } user = mdb_user.db.user.find_one({"_id": ObjectId(id)}) if user: # 权限检查 current_user_role = mdb_user.db.role.find_one({"_id": ObjectId(current_user.role_id)}) edit_user_role = mdb_user.db.role.find_one({"_id": ObjectId(user["role_id"])}) if edit_user_role \ and get_num_digits(current_user_role["permissions"]) \ <= get_num_digits(edit_user_role["permissions"]): # 没有权限修改 data = {"msg_type": "w", "msg": gettext("No permission modification"), "http_status":401} return data r = mdb_user.db.user.update_one({"_id": ObjectId(id)}, {"$set": update_data}) if not r.modified_count: data = {'msg': gettext("No changes"), 'msg_type': "w", "http_status":201} return data
def ver_name(name, project=None): ''' 各种名字字符验证 Character name to verify :param name: :return: ''' s, r = arg_verify(reqargs=[(gettext("name"), name)], required=True) if not s: return False, r["msg"] elif re.search(r"[\.\*#\?]+", name): return False, gettext( "The name format is not correct,You can't use '.','*','#','?'") elif current_user.is_authenticated and current_user.is_staff: return True, gettext("") if project: rules = mdb_sys.db.audit_rules.find({"project": project}) for rule in rules: if re.search(r"^{}$".format(rule["rule"]), name): return False, gettext( "Name is not legal, there is sensitive information") return True, gettext("")
def get_fans_users(): """ 获取用户的粉丝 :return: """ user_id = request.argget.all("user_id") page = str_to_num(request.argget.all("page", 1)) pre = str_to_num(request.argget.all("pre", 20)) s, r = arg_verify(reqargs=[("user id", user_id)], required=True) if not s: return r data = {"users": []} fans = mdb_user.db.user_follow.find({"type": "account", "follow": user_id}) data_cnt = fans.count(True) for user in fans.skip(pre * (page - 1)).limit(pre): s, r = get_user_public_info( user_id=user["user_id"], is_basic=False, current_user_isauth=current_user.is_authenticated) if s: data["users"].append(r) data["users"] = datas_paging(pre=pre, page_num=page, data_cnt=data_cnt, datas=data["users"]) return data
def del_business(): ''' 删除厂家 :return: ''' ids = json_to_pyseq(request.argget.all('ids')) s, r = arg_verify([(gettext("ids"), ids)], required=True) if not s: return r user_id = current_user.str_id obj_ids = [] faied_cnt = 0 for id in ids: if mdb_web.dbs["plug_warehouse_goods"].find_one({"business_id":id, "user_id":user_id}): faied_cnt += 1 continue obj_ids.append(ObjectId(id)) r = mdb_web.dbs["plug_warehouse_business"].delete_many({"_id": {"$in": obj_ids}, "user_id":user_id}) if r.deleted_count: data = {"msg": gettext("Successfully deleted {} business").format(r.deleted_count), "msg_type": "s", "http_status": 204} else: data = {"msg": gettext("Failed to delete"), "msg_type": "w", "http_status": 400} if faied_cnt: data["msg"] = gettext("There are {} business below the goods, can not be deleted, can not be deleted").format(faied_cnt) return data
def audit_rule_add(): project = request.argget.all('project') rule = request.argget.all('rule') reqargs = [(gettext("rule"), rule), ("project", project)] s, r = arg_verify(reqargs=reqargs, required=True) if not s: return r else: if mdbs["sys"].db.audit_rules.find_one({ "project": project, "rule": rule }): data = { "msg": gettext("The rule already exists"), "msg_type": "w", "custom_status": 403 } else: mdbs["sys"].db.audit_rules.insert_one({ "rule": rule, "project": project, "time": time.time() }) data = { "msg": gettext("Add a success"), "msg_type": "s", "custom_status": 201 } return data
def del_goods(): ''' 删除 :return: ''' ids = json_to_pyseq(request.argget.all('ids')) s, r = arg_verify([(gettext("ids"), ids)], required=True) if not s: return r user_id = current_user.str_id obj_ids = [] for id in ids: obj_ids.append(ObjectId(id)) r = mdb_web.dbs["plug_warehouse_goods"].delete_many({ "_id": { "$in": obj_ids }, "user_id": user_id }) if r.deleted_count: data = { "msg": gettext("Successfully deleted {} goods").format(r.deleted_count), "msg_type": "s", "http_status": 204 } else: data = { "msg": gettext("Failed to delete"), "msg_type": "w", "http_status": 400 } return data
def add_business(): ''' 添加厂家 :return: ''' goods_type_id = request.argget.all('goods_type_id') mobile_phone = request.argget.all('mobile_phone') addr = request.argget.all('addr') name = request.argget.all('name') s, r = arg_verify([(gettext("name"), name), (gettext("goods_type_id"), goods_type_id)], required=True) if not s: return r user_id = current_user.str_id if mdb_web.dbs["plug_warehouse_business"].find_one({"name":name, "type_id":goods_type_id,"user_id":user_id}): data = {"msg": gettext("business already exists"), "msg_type": "w", "http_status": 403} else: up_data = { "name": name, "type_id":goods_type_id, "mobile_phone":mobile_phone, "addr":addr, "user_id": user_id } mdb_web.dbs["plug_warehouse_business"].insert(up_data) data = {"msg": gettext("Add business successfully"), "msg_type": "s", "http_status": 201} return data
def edit_static_file(): """ 静态文件编辑, 如html文件 :return: """ filename = request.argget.all('filename', "index").strip("/") file_path = request.argget.all('file_path', "").strip("/") content = request.argget.all('content', "") theme_name = request.argget.all("theme_name") s, r = arg_verify([(gettext("theme name"), theme_name)], required=True) if not s: return r path = os.path.join(THEME_TEMPLATE_FOLDER, theme_name) file = "{}/{}/{}".format(path, file_path, filename) if not os.path.exists(file): data = { "msg": gettext("File does not exist can not be edited,'{}'").format(file), "msg_type": "w", "custom_status": 404 } else: with open(file, "w") as wf: wf.write(content) data = { "msg": gettext("Saved successfully"), "msg_type": "s", "custom_status": 201 } return data
def update_user_msgs(): """ api更新消息 :return: """ ids = json_to_pyseq(request.argget.all("ids", [])) status_update = request.argget.all("status_update") if status_update: s, r = arg_verify(reqargs=[("status_update", status_update)], only=["have_read"]) if not s: return r for i, tid in enumerate(ids): ids[i] = ObjectId(tid) # 标记 r = mdb_user.db.message.update_many({"_id": { "$in": ids }}, {"$set": { "status": status_update }}) if r.modified_count: data = { 'msg': gettext("Update succeed"), 'msg_type': "s", "http_status": 201 } else: data = { 'msg': gettext("No changes"), 'msg_type': "w", "http_status": 201 } return data
def start_plugin(): """ 开启一个插件 :return: """ name = request.argget.all('name') s, r = arg_verify(reqargs=[(gettext("name"), name)], required=True) if not s: return r find_query = {"plugin_name": name, "error": {"$in": [0, False]}} plugin = mdbs["sys"].db.plugin.find_one(find_query) if plugin: other_plugin = mdbs["sys"].db.plugin.find_one({ "hook_name": plugin["hook_name"], "active": { "$in": [1, True] } }) if other_plugin: data = { "msg": gettext("Plugin[{}] with similar functionality is in use," " please stop it first").format( other_plugin["plugin_name"]), "msg_type": "w", "custom_status": 400 } return data r = mdbs["sys"].db.plugin.update_one(find_query, {"$set": {"active": 1}}) register_r = plugin_manager.register_plugin(name) if r.modified_count and register_r: # 清除缓存 r = mdbs["sys"].db.plugin.find_one({"plugin_name": name}) if r: cache.delete_autokey(fun="get_plugin_info", db_type="redis", hook_name=r['hook_name']) data = { "msg": gettext("Plug-in activated successfully"), "msg_type": "s", "custom_status": 201 } elif r.matched_count and register_r: data = { "msg": gettext("Plug-in is already activated"), "msg_type": "w", "custom_status": 400 } else: data = { "msg": gettext("Plug-in activation failed"), "msg_type": "w", "custom_status": 400 } return data
def stop_plugin(): """ 停用一个插件 :return: """ name = request.argget.all('name') s, r = arg_verify(reqargs=[(gettext("name"), name)], required=True) if not s: return r r = mdbs["sys"].db.plugin.update_one({"plugin_name": name}, {"$set": { "active": 0 }}) if r.matched_count: # 清除缓存 r = mdbs["sys"].db.plugin.find_one({"plugin_name": name}) if r: cache.delete_autokey(fun="get_plugin_info", db_type="redis", hook_name=r['hook_name']) data = { "msg": gettext("Plug-in stopped successfully"), "msg_type": "s", "custom_status": 201 } else: data = { "msg": gettext("Plug-in failed to stop"), "msg_type": "w", "custom_status": 400 } return data
def add_goods_categorys(): ''' 添加商品分类 :return: ''' goods_type_id = request.argget.all('goods_type_id') name = request.argget.all('name') s, r = arg_verify([(gettext("name"), name), (gettext("goods_type_id"), goods_type_id)], required=True) if not s: return r user_id = current_user.str_id if mdb_web.dbs["plug_warehouse_category"].find_one({"name":name, "type_id":goods_type_id,"user_id":user_id}): data = {"msg": gettext("Item category already exists"), "msg_type": "w", "http_status": 403} else: up_data = { "name": name, "type_id":goods_type_id, "user_id": user_id } mdb_web.dbs["plug_warehouse_category"].insert(up_data) data = {"msg": gettext("Add item category successfully"), "msg_type": "s", "http_status": 201} return data
def refresh_plugin_setting(): """ 获取插件设置 :return: """ plugin_name = request.argget.all('plugin_name') s, r = arg_verify(reqargs=[("plugin name", plugin_name)], required=True) if not s: return r register_r = plugin_manager.load_plugin(plugin_name, is_import=True) if register_r: if mdbs["sys"].db.plugin.find_one( {"plugin_name": plugin_name, "active": {"$nin": [1, True]}}): # 刷新后, 判断如果并位激活的插件,那就注销注册 plugin_manager.unregister_plugin(plugin_name) data = { "msg": gettext("Refreshed successfully"), "msg_type": "s", "custom_status": 201} else: data = { "msg": gettext("Failed to refresh. Please check the previous plug-in page for error messages"), "msg_type": "e", "custom_status": 400} return data
def get_static_file_content(): """ 获取静态文件内容, 如html文件 :return: """ filename = request.argget.all('filename', "index").strip("/") file_path = request.argget.all('file_path', "").strip("/") theme_name = request.argget.all("theme_name") s, r = arg_verify([(gettext("theme name"), theme_name)], required=True) if not s: return r path = os.path.join(THEME_TEMPLATE_FOLDER, theme_name) file = "{}/{}/{}".format(path, file_path, filename) if not os.path.exists(file) or THEME_TEMPLATE_FOLDER not in file: data = { "msg": gettext("File not found,'{}'").format(file), "msg_type": "w", "custom_status": 404 } else: with open(file) as wf: content = wf.read() data = { "content": content, "file_relative_path": file_path.replace(path, "").strip("/") } return data
def category_edit(user_id=None): if user_id is None: user_id = current_user.str_id tid = request.argget.all('id') ntype = request.argget.all('type') name = request.argget.all('name') # theme_name = get_config("theme", "CURRENT_THEME_NAME") theme_name = g.get_config("theme", "CURRENT_THEME_NAME") s1, v = short_str_verifi(name, "class_name") s2, r2 = arg_verify(reqargs=[ (gettext("name"), name), ], required=True, max_len=int(get_config("category", "CATEGORY_MAX_LEN"))) if not s1: data = {"msg": v, "msg_type": "w", "custom_status": 422} elif not s2: data = r2 elif mdbs["web"].db.theme_category.find_one({ "_id": { "$ne": ObjectId(tid) }, "type": ntype, "user_id": user_id, "theme_name": theme_name, "name": name }): data = { "msg": gettext("Name already exists"), "msg_type": "w", "custom_status": 403 } else: r = mdbs["web"].db.theme_category.update_one( { "_id": ObjectId(tid), "user_id": user_id }, {"$set": { "name": name }}) if r.modified_count: update_media_category_name.apply_async(kwargs={ "category_id": tid, "new_name": name }) data = { "msg": gettext("Modify the success"), "msg_type": "s", "custom_status": 201 } else: data = { "msg": gettext("No modification"), "msg_type": "w", "custom_status": 400 } data["theme_name"] = theme_name return data
def get_media(user_id=None): """ :param user_id: 媒体为管理端(系统)所有时需要传入user_id = 0 :return: """ if user_id is None: user_id = current_user.str_id tid = request.argget.all("id") s, r = arg_verify([("id", tid)], required=True) if not s: return r data = {} media = mdb_web.db.media.find_one({ "_id": ObjectId(tid), "user_id": user_id }) if media: media["_id"] = str(media["_id"]) if "url" in media and media["url"]: media["url"] = get_file_url(media["url"]) data["media"] = media return data
def api_account_data_availability(): """ GET: 查看用户名,email,个性域是否可以使用 field:<str>, username or email or custom_domain vaule:<str> :return: """ field = request.argget.all('field', 'email').strip() value = request.argget.all('value') s, r = arg_verify(reqargs=[(field, value)], required=True) if not s: data = r elif mdb_user.db.user.find_one({"_id": {"$ne": current_user.id}, field: value}): data = {'msg': gettext("This {} address has been registered").format( field), 'msg_type': "w", "http_status": 403} elif mdb_user.db.user.find_one({"_id": current_user.id, field: value}): data = { 'msg': gettext( "This is the email address you currently use".format(field)), 'msg_type': "w", "http_status": 403} else: data = {'msg': gettext("This {} can be used").format(field), 'msg_type': "s", "http_status": 200} return response_format(data)
def get_medias(user_id=None): """ :param user_id: 媒体为管理端(系统)所有时需要传入user_id = 0 :return: """ if user_id is None: user_id = current_user.str_id keyword = request.argget.all("keyword") category_id = request.argget.all("category_id") ctype = request.argget.all("ctype") page = str_to_num(request.argget.all("page", 1)) pre = str_to_num(request.argget.all("pre", 12)) sort = json_to_pyseq(request.argget.all('sort')) s, r = arg_verify([(gettext("type"), ctype)], only=get_config("category", "CATEGORY_TYPE").values()) if not s: return r data = {} if category_id: if category_id == "default": category_id = {"$in": [None, ""]} query = {"category_id": category_id, "type": ctype} else: query = {"type": ctype} if keyword: k_rule = {"$regex": keyword, "$options": "$i"} query["$or"] = [{ "name": k_rule }, { "title": k_rule }, { "link": k_rule }, { "text": k_rule }] query["user_id"] = user_id # sort if sort: for i, srt in enumerate(sort): sort[i] = (list(srt.keys())[0], list(srt.values())[0]) else: sort = [("time", -1)] medias = mdb_web.db.media.find(query) data_cnt = medias.count(True) medias = list(medias.sort(sort).skip(pre * (page - 1)).limit(pre)) for d in medias: d["_id"] = str(d["_id"]) if "url" in d and d["url"]: d["url"] = get_file_url(d["url"]) data["medias"] = datas_paging(pre=pre, page_num=page, data_cnt=data_cnt, datas=medias) return data
def update_business(): ''' 更新厂家名称 :return: ''' name = request.argget.all('name') mobile_phone = request.argget.all('mobile_phone') addr = request.argget.all('addr') goods_type_id = request.argget.all('goods_type_id') id = request.argget.all('id') s, r = arg_verify([(gettext("name"), name), ("id", id)], required=True) if not s: return r user_id = current_user.str_id if mdb_web.dbs["plug_warehouse_business"].find_one({"name":name, "user_id":user_id,"type_id":goods_type_id, "_id":{"$ne":ObjectId(id)}}): data = {"msg": gettext("Business already exists"), "msg_type": "w", "http_status": 403} else: up_data = { "name": name, "mobile_phone": mobile_phone, "addr": addr, } print(up_data) mdb_web.dbs["plug_warehouse_business"].update_one({"_id":ObjectId(id), "user_id":current_user.str_id}, {"$set":up_data}) data = {"msg": gettext("Update business successfully"), "msg_type": "s", "http_status": 201} return data
def get_followed_users(): """ 获取一个用户已经关注的用户 :return: """ user_id = request.argget.all("user_id") page = str_to_num(request.argget.all("page", 1)) pre = str_to_num(request.argget.all("pre", 20)) s, r = arg_verify(reqargs=[("user id", user_id)], required=True) if not s: return r data = {"users": []} follow_user = mdb_user.db.user_follow.find_one({ "user_id": user_id, "type": "account" }) if follow_user: data_cnt = len(follow_user["follow"]) for tid in follow_user["follow"][(page - 1) * pre:page * pre]: s, r = get_user_public_info( user_id=str(tid), is_basic=False, determine_following=False, current_user_isauth=current_user.is_authenticated) if s: data["users"].append(r) else: data_cnt = 0 data["users"] = datas_paging(pre=pre, page_num=page, data_cnt=data_cnt, datas=data["users"]) return data
def del_navs(): ids = json_to_pyseq(request.argget.all("ids")) s, r = arg_verify([(gettext("ids"), ids)], required=True) if not s: return r del_ids = [] for id in ids: del_ids.append(ObjectId(id)) r = mdbs["sys"].dbs["theme_nav_setting"].delete_many( {"_id": { "$in": del_ids }}) if r.deleted_count: data = { "msg": gettext("Deleted successfully"), "msg_type": "s", "custom_status": 200 } else: data = { "msg": gettext("Delete failed"), "msg_type": "s", "custom_status": 200 } cache.delete_autokey(fun="get_global_theme_navs", theme_name=".*", lang=".*", db_type="redis", key_regex=True) return data
def follow_user(): """ 关注一个用户 :return: """ ids = json_to_pyseq(request.argget.all("ids", [])) s, r = arg_verify(reqargs=[("id", ids)], required=True) if not s: return r cnt = 0 for tid in ids[:]: if tid != current_user.str_id and get_one_user(user_id=str(tid)): r = mdb_user.db.user_follow.update_one( { "user_id": current_user.str_id, "type": "account" }, {"$addToSet": { "follow": tid }}, upsert=True) if r.modified_count or r.upserted_id: cnt += 1 # 更新粉丝统计 update_one_user(user_id=str(tid), updata={"$inc": { "fans_num": 1 }}) delete_user_info_cache(user_id=tid) if cnt: # 更新关注统计 update_one_user(user_id=current_user.str_id, updata={"$inc": { "follow_user_num": cnt }}) delete_user_info_cache(user_id=current_user.str_id) data = { "msg": gettext("Followed"), "msg_type": "s", "http_status": 201 } elif len(ids) == 1 and ids[0] == current_user.str_id: data = { "msg": gettext("You can't follow yourself"), "msg_type": "w", "http_status": 400 } else: data = { "msg": gettext("You are already following this user"), "msg_type": "w", "http_status": 400 } return data
def short_str_verifi(short_str, project=None, allow_special_chart=False): """ 各种名字短字符串验证 Character name to verify :param s: allow_special_chart: 是否允许特殊字符 :return: """ s, r = arg_verify(reqargs=[(gettext("name"), short_str)], required=True) if not s: return False, r["msg"] if not allow_special_chart: if re.search(r"[\.\*#\?]+", short_str): return False, gettext( "The name format is not correct,You can't use '.','*','#','?'") warning_msg = gettext( "Some contents contain sensitive information or do not meet the requirements of this site." " Please correct it and try again." ) if not (current_user.is_authenticated and current_user.is_staff): rules = mdbs["sys"].db.audit_rules.find({"project": project}) for rule in rules: if re.search(r"^{}$".format(rule["rule"]), short_str): return False, warning_msg r = content_inspection_text(short_str) if r["label"] != "no_plugin" and r["score"] == 100: return False, warning_msg return True, ""
def unfollow(): ''' 取消关注 :return: ''' ids = json_to_pyseq(request.argget.all("ids", [])) s, r = arg_verify(reqargs=[("id", ids)], required=True) if not s: return r for id in ids[:]: if mdb_user.db.user_follow.find_one({"user_id":current_user.str_id, "type": "account", "follow":id}): # 更新粉丝统计 update_one_user(user_id=str(id), updata={"$inc": {"fans_num": -1}}) else: ids.remove(id) delete_user_info_cache(user_id=id) r = mdb_user.db.user_follow.update_one({"user_id":current_user.str_id, "type": "account"}, {"$pullAll": {"follow": ids}}) if r.modified_count: # 更新关注统计 update_one_user(user_id=current_user.str_id, updata={"$inc": {"follow_user_num": -len(ids)}}) delete_user_info_cache(user_id=current_user.str_id) data = {"msg": gettext("Unfollow success"), "msg_type": "s", "http_status": 201} else: delete_user_info_cache(user_id=current_user.str_id) data = {"msg": gettext("Unfollow failed"), "msg_type": "w", "http_status": 400} return data