Exemplo n.º 1
0
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
Exemplo n.º 2
0
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
Exemplo n.º 3
0
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
Exemplo n.º 4
0
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
Exemplo n.º 5
0
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
Exemplo n.º 6
0
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
Exemplo n.º 7
0
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