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 public_profile(): """ 获取用户公开信息 :return: """ data = {} user_id = request.argget.all('user_id') is_basic = str_to_num(request.argget.all('is_basic', 1)) if not user_id or user_id == "None": data = { 'd_msg': gettext('Lack of parameters "user_id"'), 'd_msg_type': "e", "custom_status": 400 } return data try: ObjectId(user_id) except BaseException: data = { 'd_msg': gettext('This may be a visitor"'), 'd_msg_type': "e", "custom_status": 400 } return data s, r = get_user_public_info( user_id=user_id, is_basic=is_basic, current_user_isauth=current_user.is_authenticated) if not s: data = {'msg': r, 'msg_type': "w", "custom_status": 400} else: data["user"] = r 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 public_profile(): ''' 获取用户公开信息 :return: ''' data = {} user_id = request.argget.all('user_id') is_basic = str_to_num(request.argget.all('is_basic', 1)) if not user_id or user_id == "None": data = { 'd_msg': gettext('Lack of parameters "user_id"'), 'd_msg_type': "e", "http_status": 400 } return data try: ObjectId(user_id) except: data = { 'd_msg': gettext('This may be a visitor"'), 'd_msg_type': "e", "http_status": 400 } return data s, r = get_user_public_info(user_id=user_id, is_basic=is_basic) if not s: data = {'msg': r, 'msg_type': "w", "http_status": 400} else: data["user"] = r return data
def get_post_pr(post_id="", other_filter=None, is_admin=False, *args, **kwargs): """ 获取一个Post :param post_id: :param other_filter: :param is_admin: 是admin用户获取, 可以获取未公开的post :param args: :param kwargs: :return: """ data = {} query_conditions = {} print("query_conditions:", query_conditions) if isinstance(other_filter, dict): query_conditions = deepcopy(other_filter) query_conditions["_id"] = ObjectId(post_id) post = mdbs["web"].db.post.find_one(query_conditions) if post: if not is_admin: if not post["issued"] or post[ "is_delete"] or post["audit_score"] >= get_config( "content_inspection", "ALLEGED_ILLEGAL_SCORE"): # 未公开的 if not current_user.is_authenticated or current_user.str_id != str( post["user_id"]): # 没有权限访问 abort(401) post = objid_to_str(post, ["_id", "user_id", "audit_user_id"]) post["cover_url"] = get_file_url(post["cover_url"]) imgs_l = len(post["imgs"]) if imgs_l: for i, img in enumerate(post["imgs"]): post["imgs"][i] = get_file_url(img) s, r = get_user_public_info( user_id=post["user_id"], is_basic=False, current_user_isauth=current_user.is_authenticated) if s: post["user"] = r data["post"] = post if "category" in post and post["category"]: category = mdbs["web"].db.category.find_one( {"_id": ObjectId(str(post["category"]))}) if category: data["post"]["category_name"] = category["name"] if current_user.is_authenticated and current_user.str_id in post[ "like_user_id"]: post["like_it_already"] = True else: abort(404) return data
def get_posts_query(query_conditions, field, sort, pre, page, get_userinfo): """ 提供查询条件等获取文章 :param query_conditions: :param field: :param sort: :param pre: :param page: :param get_userinfo: :return: """ data = {} if field: ps = mdbs["web"].db.post.find(query_conditions, field) else: ps = mdbs["web"].db.post.find(query_conditions) data_cnt = ps.count(True) posts = list(ps.sort(sort).skip(pre * (page - 1)).limit(pre)) for post in posts: post = objid_to_str(post, ["_id", "user_id", "audit_user_id"]) # image if "cover_url" in post and post["cover_url"]: post["cover_url"] = get_file_url(post["cover_url"]) if "imgs" in post and len(post["imgs"]): for i, img in enumerate(post["imgs"]): post["imgs"][i] = get_file_url(img) if "user_id" not in query_conditions.keys() and get_userinfo: s, r = get_user_public_info( user_id=post["user_id"], is_basic=False, current_user_isauth=current_user.is_authenticated) if s: post["user"] = r else: post['user'] = {} # category if "category" in post and post["category"]: post["category"] = str(post["category"]) category = mdbs["web"].db.category.find_one( {"_id": ObjectId(post["category"])}) if category: post["category_name"] = category["name"] data["posts"] = datas_paging( pre=pre, page_num=page, data_cnt=data_cnt, datas=posts) return data
def get_posts_pr(field=None, page=1, pre=10, status="is_issued", sort=None, time_range=None, matching_rec=None, keyword=None, other_filter=None, is_admin=False, *args, **kwargs): ''' 获取一些指定的post :param field: :param page: :param pre: :param status: :param sort: :param time_range: :param matching_rec: :param keyword: :param other_filter: :param is_admin: 是admin用户获取, 可以获取未公开的post :param args: :param kwargs: :return: ''' data = {} if pre > get_config("post", "NUM_PAGE_MAX"): data = { "msg": gettext('The "pre" must not exceed the maximum amount'), "msg_type": "e", "http_status": 400 } return data query_conditions = {} if other_filter: query_conditions = deepcopy(other_filter) if status and status != "is_issued" and not is_admin: # 非admin用户获取未公开post, 需要认证 if not current_user.is_authenticated: # 未登录用户 abort(401) elif "user_id" in query_conditions: if query_conditions["user_id"] != current_user.str_id: # 要获取的user_id不是当前用户 abort(401) else: # 默认获取当前用户 query_conditions["user_id"] = current_user.str_id if status == "no_issued": query_conditions['$or'] = [ { 'issued': 0 }, { 'is_delete': 1 }, { 'audited': 1, 'audit_score': { "$gte": get_config("content_inspection", "ALLEGED_ILLEGAL_SCORE") } }, ] elif status == "draft": query_conditions['issued'] = 0 query_conditions['is_delete'] = 0 elif status == "not_audit": query_conditions['issued'] = 1 query_conditions['is_delete'] = 0 # 没有审核, 而且默认评分涉嫌违规的 query_conditions['audited'] = 0 query_conditions['audit_score'] = { "$gte": get_config("content_inspection", "ALLEGED_ILLEGAL_SCORE") } elif status == "unqualified": query_conditions['issued'] = 1 query_conditions['is_delete'] = 0 query_conditions['audited'] = 1 query_conditions['audit_score'] = { "$gte": get_config("content_inspection", "ALLEGED_ILLEGAL_SCORE") } elif status == "recycle": query_conditions['is_delete'] = 1 elif status == "user_remove": query_conditions['is_delete'] = {"$in": [2, 3]} else: query_conditions['issued'] = 1 query_conditions['is_delete'] = 0 query_conditions['audit_score'] = { "$lt": get_config("content_inspection", "ALLEGED_ILLEGAL_SCORE") } if keyword: keyword = {"$regex": keyword, "$options": "$i"} query_conditions["$or"] = [{ "title": keyword }, { "content": keyword }, { "category": keyword }, { "tag": keyword }] # sort if sort: for i in range(0, len(sort)): sort[i] = (list(sort[i].keys())[0], list(sort[i].values())[0]) else: sort = [("issue_time", -1), ("update_time", -1)] # time_range if time_range: now_time = time.time() gt_time = (now_time - 86400 * (time_range - 1)) - now_time % 86400 query_conditions["issue_time"] = {'$gt': gt_time} if field: ps = mdb_web.db.post.find(query_conditions, field) else: ps = mdb_web.db.post.find(query_conditions) data_cnt = ps.count(True) posts = list(ps.sort(sort).skip(pre * (page - 1)).limit(pre)) get_userinfo = kwargs.get("get_userinfo", True) for post in posts: post = objid_to_str(post, ["_id", "user_id", "audit_user_id"]) # image if "cover_url" in post and post["cover_url"]: post["cover_url"] = get_file_url(post["cover_url"]) if "imgs" in post and len(post["imgs"]): for i in range(0, len(post["imgs"])): post["imgs"][i] = get_file_url(post["imgs"][i]) if not "user_id" in query_conditions.keys() and get_userinfo: s, r = get_user_public_info(user_id=post["user_id"], is_basic=False) if s: post["user"] = r # category if "category" in post and post["category"]: post["category"] = str(post["category"]) category = mdb_web.db.category.find_one( {"_id": ObjectId(post["category"])}) if category: post["category_name"] = category["name"] data["posts"] = datas_paging(pre=pre, page_num=page, data_cnt=data_cnt, datas=posts) return data