def get_user_all_info(**kwargs): """ 获取用户全部信息, 密码除外 注意, 函数中不要写默认参数,使用kwargs, 方便更新用户数据时清理缓存 :param user_id: :param is_basic: 默认False, 为Ture时只返回最基础的数据 :param determine_following:判断当前登录用户是否有关注该用户, 前提是is_basic参数为False :return: """ user_id = kwargs.get("user_id") is_basic = kwargs.get("is_basic", 0) determine_following = kwargs.get("determine_following", True) user = mdb_user.db.user.find_one({"_id": ObjectId(user_id)}, {"password": 0}) if not user: return False, gettext("The specified user is not found") else: user["_id"] = str(user["_id"]) user["avatar_url"]["url"] = get_avatar_url(user["avatar_url"]) if not is_basic: user["follow"] = get_user_follow_data( user["_id"], determine_following=determine_following) # 登录日志 user["user_login_log"] = [] user_login_log = mdb_user.db.user_login_log.find_one( {"user_id": user["_id"]}, {"user_id": 0}) user["user_login_log"] = [] if user_login_log: user_login_log["_id"] = str(user_login_log["_id"]) user["user_login_log"] = user_login_log return True, user
def get_user_public_info(**kwargs): """ 获取用户公开信息 注意, 函数中不要写默认参数,使用kwargs, 方便更新用户数据时清理缓存 :param user_id: :param is_basic: 默认False, 为Ture时只返回最基础的数据 :param determine_following:判断当前登录用户是否有关注该用户, 前提是is_basic参数为False :return: """ user_id = kwargs.get("user_id") is_basic = kwargs.get("is_basic", 0) determine_following = kwargs.get("determine_following", True) user = mdb_user.db.user.find_one({"_id": ObjectId(user_id)}, { "username": 1, "custom_domain": 1, "avatar_url": 1, "introduction": 1, "gender": 1 }) if not user: return False, gettext("The specified user is not found") else: user["_id"] = str(user["_id"]) user["custom_domain"] = str(user["custom_domain"]) user["avatar_url"]["url"] = get_avatar_url(user["avatar_url"]) if not is_basic: user["follow"] = get_user_follow_data( user["_id"], determine_following=determine_following) return True, user
def users(): ''' Admin获取用户数据 :return: ''' data = {} status = request.argget.all('status') page = int(request.argget.all('page', 1)) pre = int(request.argget.all('pre', 10)) keyword = request.argget.all('keyword', '').strip() if status == "normal" or not status: status = "normal" query_conditions = {"is_delete": {"$in": [False, 0]}, "active": {"$in": [True, 1]}} elif status == "inactive": query_conditions = {"is_delete": {"$in": [False, 0]}, "active": {"$in": [False, 0]}} elif status == "cancelled": query_conditions = {"is_delete": {"$in": [True, 1]}} if keyword: keyword = {"$regex":keyword, "$options":"$i"} query_conditions["$or"] = [{"username": keyword}, {"email": keyword}, {"custom_domain": keyword} ] us = mdb_user.db.user.find(query_conditions, {"password": 0}) data_cnt = us.count(True) users = list(us.sort([("create_at",-1)]).skip(pre * (page - 1)).limit(pre)) roles = list(mdb_user.db.role.find({})) for user in users: user['_id'] = str(user['_id']) for role in roles: if ObjectId(user["role_id"]) == role["_id"]: user["role_name"] = role["name"] user_login_log = mdb_user.db.user_login_log.find_one({"user_id": user["_id"]}, {"user_id": 0}) user["user_login_log"] = [] if user_login_log: user_login_log["_id"] = str(user_login_log["_id"]) user_login_log["login_info"] = sorted(user_login_log["login_info"], key=lambda x:x["time"], reverse=True) user["user_login_log"] = user_login_log user_op_log = mdb_user.db.user_op_log.find_one({'user_id': user["_id"]}, {"user_id": 0}) user["user_op_log"] = [] if user_op_log: user_op_log["_id"] = str(user_op_log["_id"]) user_op_log["logs"] = sorted(user_op_log["logs"], key=lambda x:x["time"], reverse=True) user["user_op_log"] = user_op_log user["role_id"] = str(user["role_id"]) user["avatar_url"]["url"] = get_avatar_url(user["avatar_url"]) data["users"] = datas_paging(pre=pre, page_num=page, data_cnt=data_cnt, datas=users) data["status"] = status return data
def search_process(): ''' 搜索(暂不支持全文搜索) 只能搜索文章, 用户 :return: ''' keyword = request.argget.all('keyword') target = request.argget.all('target') page = str_to_num(request.argget.all('page', 1)) pre = str_to_num(request.argget.all('pre', 10)) s, r = arg_verify(reqargs=[(gettext("keyword"), keyword)], required=True) if not s: return r data = {"posts":{}, "users":{}} # post if not target or target == "post": data["posts"] = {} data["posts"]["items"] = get_posts_pr(field={"title":1, "issue_time":1, "brief_content":1}, page=page, pre=pre, status="is_issued", sort=None, time_range=None, matching_rec=None, keyword=keyword, other_filter=None, is_admin=False, get_userinfo=False)["posts"] data["posts"]["kw"] = keyword if not target or target == "user": # user data["users"] = {"kw": keyword, "items": []} query_conditions = {"is_delete": {"$in": [False, 0]}, "active": {"$in": [True, 1]}} keyword = {"$regex":keyword, "$options":"$i"} query_conditions["$or"] = [{"username": keyword}, {"email": keyword}, {"custom_domain": keyword} ] us = mdb_user.db.user.find(query_conditions, {"_id": 1, "username":1, "avatar_url":1, "custom_domain":1, "gender":1, }) data_cnt = us.count(True) users = list(us.skip(pre * (page - 1)).limit(pre)) for user in users: user['_id'] = str(user['_id']) user["avatar_url"]["url"] = get_avatar_url(user["avatar_url"]) data["users"]["items"] = datas_paging(pre=pre, page_num=page, data_cnt=data_cnt, datas=users) return data
def __init__(self, id, **kwargs): user_id = id super(User, self).__init__(**kwargs) user = get_one_user(user_id=str(user_id)) if user: if "password" in user and user["password"]: self.no_password = False del user["password"] else: self.no_password = True self.id = ObjectId(user_id) self.str_id = str(user_id) self.username = user["username"] self.alias = user["alias"] self.email = user["email"] self.mphone_num = user["mphone_num"] self.custom_domain = user["custom_domain"] self.gender = user["gender"] self.avatar_url = get_avatar_url(user["avatar_url"]) self.role_id = ObjectId(user["role_id"]) self.active = user["active"] self.is_delete = user["is_delete"] self.create_at = user["create_at"] self.update_at = user["update_at"] self.editor = user["editor"] self.jwt_login_time = user.get("jwt_login_time", None) if not self.mphone_num: user_info_mphone_num = None else: temp_num = str(self.mphone_num) user_info_mphone_num = "{}****{}".format( temp_num[0:3], temp_num[-5:-1]), self.user_info = { "username": self.username, "active": self.active, "is_delete": self.is_delete, "email": self.email, "mphone_num": user_info_mphone_num, "custom_domain": self.custom_domain, "avatar_url": self.avatar_url, "role_id": self.role_id, "id": self.id } else: return