def search_category(word, action=ActionCode.SEARCH_CATEGORY): try: wd = '%%%s%%' % word result = db.session.query(Link.category_id, Category.name, func.count(Link.category_id)) \ .filter(or_(Link.name.like(wd), Link.description.like(wd)))\ .group_by(Link.category_id). \ join(Category).all() if result is not None and isinstance(result, list): total_category_count = len(result) result_list = [] for res in result: if len(res) == 3: sub = dict() sub["category_id"] = res[0] sub["category_name"] = res[1] sub["count"] = res[2] result_list.append(sub) data = DictData() data.add("total_record", total_category_count) data.add("data", result_list) data.add("word", word) return ActionResult(action, StatusCode.SUCCESS, MsgCode.QUERY_SUCC, data) except: traceback.print_exc() return ActionResult(action, StatusCode.FAILED, MsgCode.QUERY_FAILED)
def get_categories_by_page(page, page_size, conditions_dict, action=ActionCode.GET_CATEGORY): try: query = add_conditions(Category, conditions_dict) paginate = query.order_by(Category.id.asc()).paginate( int(page), int(page_size), False) total_count = paginate.total categories = paginate.items category_list = list() for category in categories: category_list.append(category.json()) result = DictData() result.add("total_record", total_count) result.add("total_pages", paginate.pages) result.add("current_page", paginate.page) result.add("current_page_size", paginate.per_page) result.add("has_prev", paginate.has_prev) result.add("has_next", paginate.has_next) result.add("data", category_list) return ActionResult(action, StatusCode.SUCCESS, MsgCode.QUERY_SUCC, result) except: traceback.print_exc() return ActionResult(action, StatusCode.FAILED, MsgCode.QUERY_FAILED)
def search(page, page_size, word, category_id=None, action=ActionCode.SEARCH_CATEGORY): try: wd = '%%%s%%' % word query = Link.query.filter(or_(Link.name.like(wd), Link.description.like(wd))) if category_id is not None: query = query.filter_by(category_id=int(category_id)) paginate = query.order_by(Link.update_datetime.desc()).paginate(int(page), int(page_size), False) total_count = paginate.total links = paginate.items links_list = list() for link in links: links_list.append(link.json()) result = DictData() result.add("total_record", total_count) result.add("total_pages", paginate.pages) result.add("current_page", paginate.page) result.add("current_page_size", paginate.per_page) result.add("has_prev", paginate.has_prev) result.add("has_next", paginate.has_next) result.add("data", links_list) return ActionResult(action, StatusCode.SUCCESS, MsgCode.QUERY_SUCC, result) except: traceback.print_exc() return ActionResult(action, StatusCode.FAILED, MsgCode.QUERY_FAILED)
def login(username, password, remember_me, action=ActionCode.LOGIN): user = User.query.filter_by(name=username).first() if user is None: print("邮箱") user = User.query.filter_by(email=username).first() if user is not None and user.check_password(password): print("邮箱 密码成功") user.login_count += 1 user.dingding() user.save() login_user(user, remember=remember_me) return ActionResult(action, StatusCode.SUCCESS, MsgCode.LOGIN_SUCC) else: print("邮箱 密码失败") return ActionResult(action, StatusCode.FAILED, MsgCode.LOGIN_FAILED) elif user.check_password(password): print("用户名 密码成功") user.login_count += 1 user.save() login_user(user, remember=remember_me) return ActionResult(action, StatusCode.SUCCESS, MsgCode.LOGIN_SUCC) else: print("用户名 密码失败") return ActionResult(action, StatusCode.FAILED, MsgCode.LOGIN_FAILED)
def get_user_links_by_page(user_id, page, page_size, action=ActionCode.GET_LINKS_BY_PAGE): try: user_id = int(user_id) page = int(page) page_size = int(page_size) except: traceback.print_exc() return ActionResult(action, StatusCode.FAILED, MsgCode.PAGE_INVALID) try: user = User.query.filter_by(id=user_id).first() except: traceback.print_exc() return ActionResult(action, StatusCode.FAILED, MsgCode.USER_NOT_EXIST) if page <= 0: return ActionResult(action, StatusCode.FAILED, MsgCode.PAGE_INVALID) else: try: paginate = user.shared_links().paginate(int(page), int(page_size), False) # paginate = Link.query.order_by(Link.datetime.desc()).paginate(int(page), int(page_size), False) links = paginate.items links_total_count = paginate.total links_list = list() for link in links: links_list.append(link.json()) result = DictData() result.add("total_record", links_total_count) result.add("data", links_list) return ActionResult(action, StatusCode.SUCCESS, MsgCode.QUERY_SUCC, result) except: traceback.print_exc() return ActionResult(action, StatusCode.FAILED, MsgCode.QUERY_FAILED)
def query_roles(page, page_size, conditions_dict, action=ActionCode.GET_ROLES): try: query = add_conditions(Role, conditions_dict) paginate = query.order_by(Role.id.asc()).paginate( int(page), int(page_size), False) total_count = paginate.total roles = paginate.items role_list = list() for role in roles: role_list.append(role.json()) result = DictData() result.add("total_record", total_count) result.add("total_pages", paginate.pages) result.add("current_page", paginate.page) result.add("current_page_size", paginate.per_page) result.add("has_prev", paginate.has_prev) result.add("has_next", paginate.has_next) result.add("data", role_list) return ActionResult(action, StatusCode.SUCCESS, MsgCode.QUERY_SUCC, result) except: traceback.print_exc() return ActionResult(action, StatusCode.FAILED, MsgCode.QUERY_FAILED)
def pack_result(self): if self.is_validate(): return ActionResult(ActionCode.SEARCH_CATEGORY, StatusCode.SUCCESS, MsgCode.REQUEST_PARAM_CHECK_VALID) else: data = DictData() data.add("errors_info", self.errors) return ActionResult(ActionCode.SEARCH_CATEGORY, StatusCode.FAILED, MsgCode.REQUEST_PARAM_CHECK_INVALID, data)
def search(key_words, action=ActionCode.SEARCH_BY_KEY_WORDS): if key_words is None: return ActionResult(action, StatusCode.FAILED, MsgCode.REQUEST_PARAM_NOT_FOUND) # FIXME: 单个关键字,在link的名称和简介中查询匹配的 result = Link.query.filter(Link.name.like(key_words)) print(result) result = Link.query.filter(Link.name.like(key_words)).all() print(result) return ActionResult(action, StatusCode.SUCCESS, MsgCode.SEARCH_SUCC)
def del_links_by_ids(link_ids, action=ActionCode.DELETE_MULTI_LINK): try: if link_ids is None or not isinstance(link_ids, list): return ActionResult(action, StatusCode.FAILED, MsgCode.REQUEST_PARAM_NOT_FOUND) Link.query.filter(Link.id.in_(link_ids)).delete(synchronize_session=False) db.session.commit() return ActionResult(action, StatusCode.SUCCESS, MsgCode.DELETE_SUCC) except: traceback.print_exc() return ActionResult(action, StatusCode.FAILED, MsgCode.DELETE_FAILED)
def del_category_by_ids(category_ids, action=ActionCode.DELETE_CATEGORY): try: if category_ids is None or not isinstance(category_ids, list): return ActionResult(action, StatusCode.FAILED, MsgCode.REQUEST_PARAM_NOT_FOUND) Category.query.filter( Category.id.in_(category_ids)).delete(synchronize_session=False) db.session.commit() return ActionResult(action, StatusCode.SUCCESS, MsgCode.DELETE_SUCC) except: traceback.print_exc() return ActionResult(action, StatusCode.FAILED, MsgCode.DELETE_FAILED)
def add_role(role_dict, action=ActionCode.ADD_ROLE): try: role = Role() role.name = role_dict["name"] role.permissions = role_dict["permissions"] ok = role.save() if ok: return ActionResult(action, StatusCode.SUCCESS, MsgCode.ADD_SUCC) else: return ActionResult(action, StatusCode.FAILED, MsgCode.ADD_FAILED) except: return ActionResult(action, StatusCode.FAILED, MsgCode.ADD_FAILED)
def del_roles_by_ids(role_ids, action=ActionCode.DELETE_ROLE): try: if role_ids is None or not isinstance(role_ids, list): return ActionResult(action, StatusCode.FAILED, MsgCode.REQUEST_PARAM_NOT_FOUND) Role.query.filter( Role.id.in_(role_ids)).delete(synchronize_session=False) db.session.commit() return ActionResult(action, StatusCode.SUCCESS, MsgCode.DELETE_SUCC) except: traceback.print_exc() return ActionResult(action, StatusCode.FAILED, MsgCode.DELETE_FAILED)
def get_user_model_by_name(user_name, action=ActionCode.GET_USER_BY_NAME): if user_name is None: return ActionResult(action, StatusCode.FAILED, MsgCode.REQUEST_PARAM_NOT_FOUND) try: user_name = str(user_name) user = User.query.filter_by(name=user_name).first() if user is not None: return ActionResult(action, StatusCode.SUCCESS, MsgCode.QUERY_SUCC, user) else: return ActionResult(action, StatusCode.FAILED, MsgCode.USER_NOT_EXIST) except: traceback.print_exc() return ActionResult(action, StatusCode.FAILED, MsgCode.USER_NOT_EXIST)
def update_link(link_dict, action=ActionCode.UPDATE_LINK): try: if link_dict is None or not isinstance(link_dict, dict): return ActionResult(action, StatusCode.FAILED, MsgCode.REQUEST_PARAM_NOT_FOUND) if "id" in link_dict: try: link_id = int(link_dict["id"]) except ValueError: # 转换int错误会进到这里 traceback.print_exc() return ActionResult(action, StatusCode.FAILED, MsgCode.REQUEST_PARAM_ERROR) else: return ActionResult(action, StatusCode.FAILED, MsgCode.LINK_ID_DISMISS) if link_id is None or link_id < 0: return ActionResult(action, StatusCode.FAILED, MsgCode.REQUEST_PARAM_ERROR) # 判断link_id 对应的数据是否存在数据库中 db_link = Link.query.filter_by(id=link_id).first() if db_link is None: return ActionResult(action, StatusCode.FAILED, MsgCode.LINK_NOT_EXIST) # 更新到数据库中 ok = db_link.update(link_dict) if ok: return ActionResult(action, StatusCode.SUCCESS, MsgCode.UPDATE_SUCC) else: return ActionResult(action, StatusCode.FAILED, MsgCode.UPDATE_FAILED) except: traceback.print_exc() return ActionResult(action, StatusCode.FAILED, MsgCode.UPDATE_FAILED)
def get_primary_link(action=ActionCode.GET_PRIMARY_LINK): try: primary_links = PrimaryLink.query.order_by(PrimaryLink.add_datetime.desc()).all() total_count = len(primary_links) links_list = list() for primary in primary_links: links_list.append({"url": primary.get_url(), "img": primary.get_img()}) result = DictData() result.add("total_record", total_count) result.add("data", links_list) return ActionResult(action, StatusCode.SUCCESS, MsgCode.QUERY_SUCC, result) except: traceback.print_exc() return ActionResult(action, StatusCode.FAILED, MsgCode.QUERY_FAILED)
def del_user_by_id(user_id, action=ActionCode.DELETE_USER): if user_id is None: return ActionResult(action, StatusCode.FAILED, MsgCode.REQUEST_PARAM_NOT_FOUND) try: user_id = int(user_id) user = User.query.filter_by(id=user_id).first() if user is not None: db.session.delete(user) db.session.commit() return ActionResult(action, StatusCode.SUCCESS, MsgCode.DELETE_SUCC) else: return ActionResult(action, StatusCode.FAILED, MsgCode.USER_NOT_EXIST) except: traceback.print_exc() return ActionResult(action, StatusCode.FAILED, MsgCode.DELETE_FAILED)
def add_link_batch(json_file, action=ActionCode.BATCH_ADD_LINK_BY_FILE): if json_file is None: return ActionResult(action, StatusCode.FAILED, MsgCode.REQUEST_PARAM_NOT_FOUND) try: file = open(json_file, encoding='utf-8') json_content = json.load(file) if json_content is None: return ActionResult(action, StatusCode.FAILED, MsgCode.REQUEST_PARAM_NOT_FOUND) except: return ActionResult(action, StatusCode.FAILED, MsgCode.REQUEST_PARAM_ERROR) if json_content['data'] is not None and len(json_content['data']) > 0: # 记录添加失败的id failed_list = list() for link in json_content['data']: action_result = add_link(json.dumps(link)) if action_result.status_code != StatusCode.SUCCESS: failed_data = dict() failed_data['error_msg'] = MsgCode.get_message(action_result.msg_code) failed_data['link_info'] = link failed_list.append(failed_data) if len(failed_list) > 0: result = DictData() result.add("about", "未添加成功的数据") result.add("total_record", len(failed_list)) result.add("failed_data", failed_list) if len(failed_list) == len(json_content['data']): return ActionResult(action, StatusCode.FAILED, MsgCode.ADD_FAILED, result) else: return ActionResult(action, StatusCode.SUCCESS, MsgCode.ADD_PART_SUCC, result) else: return ActionResult(action, StatusCode.SUCCESS, MsgCode.ADD_SUCC) else: return ActionResult(action, StatusCode.FAILED, MsgCode.LINK_IS_NULL)
def add_user(user_dict, action=ActionCode.ADD_USER): try: # 判断用户信息是否传入 if user_dict is None or not isinstance(user_dict, dict): return ActionResult(action, StatusCode.FAILED, MsgCode.REQUEST_PARAM_NOT_FOUND) # 将dict中封装的用户信息,更新填充到新建的user对象中 user = User() user.setvalue(user_dict) # 保存到数据库中 ok = user.save() if ok: return ActionResult(action, StatusCode.SUCCESS, MsgCode.ADD_SUCC) else: return ActionResult(action, StatusCode.FAILED, MsgCode.ADD_FAILED) except: return ActionResult(action, StatusCode.FAILED, MsgCode.ADD_FAILED)
def add_link(link_dict, action=ActionCode.ADD_LINK): try: # 判断链接信息是否传入 if link_dict is None or not isinstance(link_dict, dict): return ActionResult(action, StatusCode.FAILED, MsgCode.REQUEST_PARAM_NOT_FOUND) # 将dict中封装的链接信息,更新填充到新建的Link对象中 link = Link() link.setvalue(link_dict) # 保存到数据库中 ok = link.save() if ok: return ActionResult(action, StatusCode.SUCCESS, MsgCode.ADD_SUCC) else: return ActionResult(action, StatusCode.FAILED, MsgCode.ADD_FAILED) except: return ActionResult(action, StatusCode.FAILED, MsgCode.ADD_FAILED)
def add_category(category_dict, action=ActionCode.ADD_CATEGORY): try: # 判断类别信息是否传入 if category_dict is None or not isinstance(category_dict, dict): return ActionResult(action, StatusCode.FAILED, MsgCode.REQUEST_PARAM_NOT_FOUND) # 将dict中封装的类别信息,更新填充到新建的category对象中 category = Category() category.setvalue(category_dict) # 保存到数据库中 ok = category.save() if ok: return ActionResult(action, StatusCode.SUCCESS, MsgCode.ADD_SUCC) else: return ActionResult(action, StatusCode.FAILED, MsgCode.ADD_FAILED) except: return ActionResult(action, StatusCode.FAILED, MsgCode.ADD_FAILED)
def get_link_by_id(link_id, action=ActionCode.GET_LINK_BY_ID): if link_id is None: return ActionResult(action, StatusCode.FAILED, MsgCode.REQUEST_PARAM_NOT_FOUND) try: link_id = int(link_id) link = Link.query.filter_by(id=link_id).first() if link is not None: data = list() data.append(link.json()) result = DictData() result.add("total_record", 1) result.add("data", data) return ActionResult(action, StatusCode.SUCCESS, MsgCode.QUERY_SUCC, result) else: return ActionResult(action, StatusCode.FAILED, MsgCode.LINK_NOT_EXIST) except: traceback.print_exc() return ActionResult(action, StatusCode.FAILED, MsgCode.LINK_NOT_EXIST)
def get_user_by_id(user_id, action=ActionCode.GET_USER_BY_ID): if user_id is None: return ActionResult(action, StatusCode.FAILED, MsgCode.REQUEST_PARAM_NOT_FOUND) try: user_id = int(user_id) user = User.query.filter_by(id=user_id).first() if user is not None: data = list() data.append(user.json()) result = DictData() result.add("total_record", 1) result.add("data", data) return ActionResult(action, StatusCode.SUCCESS, MsgCode.QUERY_SUCC, result) else: return ActionResult(action, StatusCode.FAILED, MsgCode.USER_NOT_EXIST) except: traceback.print_exc() return ActionResult(action, StatusCode.FAILED, MsgCode.USER_NOT_EXIST)
def get_worthy_link(page, page_size, action=ActionCode.GET_WORTHY_LINK): try: paginate = WorthyLink.query.order_by(WorthyLink.add_datetime.desc()).paginate(int(page), int(page_size), False) total_count = paginate.total worthy_links = paginate.items links_list = list() for worthy in worthy_links: links_list.append(worthy.get_link().json()) result = DictData() result.add("total_record", total_count) result.add("total_pages", paginate.pages) result.add("current_page", paginate.page) result.add("current_page_size", paginate.per_page) result.add("has_prev", paginate.has_prev) result.add("has_next", paginate.has_next) result.add("data", links_list) return ActionResult(action, StatusCode.SUCCESS, MsgCode.QUERY_SUCC, result) except: traceback.print_exc() return ActionResult(action, StatusCode.FAILED, MsgCode.QUERY_FAILED)
def del_link_by_id(link_id, action=ActionCode.DELETE_LINK): if link_id is None: return ActionResult(action, StatusCode.FAILED, MsgCode.REQUEST_PARAM_NOT_FOUND) try: link_id = int(link_id) # 如果传入的值不能转换为int, 返回参数错误 except: traceback.print_exc() return ActionResult(action, StatusCode.FAILED, MsgCode.REQUEST_PARAM_ERROR) try: link = Link.query.filter_by(id=link_id).first() if link is not None: db.session.delete(link) db.session.commit() return ActionResult(action, StatusCode.SUCCESS, MsgCode.DELETE_SUCC) else: return ActionResult(action, StatusCode.FAILED, MsgCode.LINK_NOT_EXIST) except: traceback.print_exc() return ActionResult(action, StatusCode.FAILED, MsgCode.DELETE_FAILED)
def update_role(role_dict, action=ActionCode.UPDATE_ROLE): try: # 判断角色信息是否传入 if role_dict is None or not isinstance(role_dict, dict): return ActionResult(action, StatusCode.FAILED, MsgCode.REQUEST_PARAM_NOT_FOUND) try: role_id = int(role_dict["id"]) except: return ActionResult(action, StatusCode.FAILED, MsgCode.REQUEST_PARAM_ERROR) # 判断role_id 对应的用户是否存在数据库中 db_role = Role.query.filter_by(id=role_id).first() if db_role is None: return ActionResult(action, StatusCode.FAILED, MsgCode.USER_NOT_EXIST) # role_dict为字典类型(key必须对应User表中的字段名) ok = db_role.update(role_dict) if ok: return ActionResult(action, StatusCode.SUCCESS, MsgCode.UPDATE_SUCC) else: return ActionResult(action, StatusCode.FAILED, MsgCode.UPDATE_FAILED) except: traceback.print_exc() return ActionResult(action, StatusCode.FAILED, MsgCode.UPDATE_FAILED)
def update_category(category_dict, action=ActionCode.UPDATE_CATEGORY): # category_dict为字典类型(key必须对应Category表中的字段名) try: if category_dict is None or not isinstance(category_dict, dict): return ActionResult(action, StatusCode.FAILED, MsgCode.REQUEST_PARAM_NOT_FOUND) try: category_id = int(category_dict["id"]) except ValueError: traceback.print_exc() return ActionResult(action, StatusCode.FAILED, MsgCode.REQUEST_PARAM_ERROR) # 判断category_id 对应的类别是否存在数据库中 db_category = Category.query.filter_by(id=category_id).first() if db_category is None: return ActionResult(action, StatusCode.FAILED, MsgCode.CATEGORY_NOT_EXIST) # 使用Category自身的update方法修改并提交到数据库, category_dict为字典类型(key必须对应Category表中的字段名) ok = db_category.update(category_dict) if ok: return ActionResult(action, StatusCode.SUCCESS, MsgCode.UPDATE_SUCC) else: return ActionResult(action, StatusCode.FAILED, MsgCode.UPDATE_FAILED) except: traceback.print_exc() return ActionResult(action, StatusCode.FAILED, MsgCode.UPDATE_FAILED)
def register_user(username, email, password, action=ActionCode.REGISTER_USER): # 判断注册信息是否传入 if username is None or username == "": return ActionResult(action, StatusCode.FAILED, MsgCode.EMAIL_IS_NULL) if email is None or email == "": return ActionResult(action, StatusCode.FAILED, MsgCode.EMAIL_IS_NULL) if password is None or password == "": return ActionResult(action, StatusCode.FAILED, MsgCode.USER_PASSWORD_IS_NULL) # 用户名合法 if not check_user_name_valid(username): return ActionResult(action, StatusCode.FAILED, MsgCode.USER_NAME_INVALID) # 用户名不能重复 if check_user_name_duplicate(username): return ActionResult(action, StatusCode.FAILED, MsgCode.USER_NAME_DUPLICATE) # 邮箱合法 if not check_user_email_valid(email): return ActionResult(action, StatusCode.FAILED, MsgCode.EMAIL_IS_INVALID) # 邮箱已注册 if check_user_email_duplicate(email): return ActionResult(action, StatusCode.FAILED, MsgCode.EMAIL_DUPLICATE) user = User() user.name = username user.email = email user.set_password(password) # 保存到数据库中 ok = user.save() if ok: # 发送邮箱账户确认邮件 send_account_confirm_email(user) # 静默登录用户, 方便用户从邮箱中点击确认链接时,不用重新登录,即可认证成功, 因为为了确保安全,认证视图函数要求登录权限才能操作 login_user(user) return ActionResult(action, StatusCode.SUCCESS, MsgCode.REGISTER_SUCC) else: return ActionResult(action, StatusCode.FAILED, MsgCode.REGISTER_FAILED)
def get_links_by_page(page, page_size, conditions_dict, action=ActionCode.GET_LINKS_BY_PAGE): try: query = add_conditions(Link, conditions_dict) paginate = query.order_by(Link.update_datetime.desc()).paginate(int(page), int(page_size), False) total_count = paginate.total links = paginate.items links_list = list() for link in links: links_list.append(link.json()) result = DictData() result.add("total_record", total_count) result.add("total_pages", paginate.pages) result.add("current_page", paginate.page) result.add("current_page_size", paginate.per_page) result.add("has_prev", paginate.has_prev) result.add("has_next", paginate.has_next) result.add("data", links_list) return ActionResult(action, StatusCode.SUCCESS, MsgCode.QUERY_SUCC, result) except: traceback.print_exc() return ActionResult(action, StatusCode.FAILED, MsgCode.QUERY_FAILED)
def get_users_by_page(page, page_size, conditions_dict, action=ActionCode.GET_USERS_BY_PAGE): try: query = add_conditions(User, conditions_dict) paginate = query.order_by(User.register_datetime.desc()).paginate(int(page), int(page_size), False) total_count = paginate.total users = paginate.items user_list = list() for user in users: user_list.append(user.json()) result = DictData() result.add("total_record", total_count) result.add("total_pages", paginate.pages) result.add("current_page", paginate.page) result.add("current_page_size", paginate.per_page) result.add("has_prev", paginate.has_prev) result.add("has_next", paginate.has_next) result.add("data", user_list) return ActionResult(action, StatusCode.SUCCESS, MsgCode.QUERY_SUCC, result) except: traceback.print_exc() return ActionResult(action, StatusCode.FAILED, MsgCode.QUERY_FAILED)
def get_links_by_name(user_name, action=ActionCode.GET_LINK_BY_ID): action_result = get_user_model_by_name(user_name) if action_result.success(): user_db = action_result.data users = user_db.links.all() user_list = list() for user in users: user_list.append(user.json()) data = DictData() data.add("total_record", user_db.links.count()) data.add("data", user_list) return ActionResult(action, StatusCode.SUCCESS, MsgCode.QUERY_SUCC, data) else: return action_result