Exemple #1
0
def adm_get_posts():

    page = int(request.argget.all('page', 1))
    pre = int(request.argget.all('pre', 10))
    sort = json_to_pyseq(request.argget.all('sort'))
    status = request.argget.all('status', 'is_issued')
    matching_rec = request.argget.all('matching_rec')
    time_range = int(request.argget.all('time_range', 0))
    keyword = request.argget.all('keyword', '').strip()
    fields = json_to_pyseq(request.argget.all('fields'))
    unwanted_fields = json_to_pyseq(request.argget.all('unwanted_fields'))

    # 不能同时使用fields 和 unwanted_fields
    temp_field = {}
    if fields:
        for f in fields:
            temp_field[f] = 1
    elif unwanted_fields:
        for f in unwanted_fields:
            temp_field[f] = 0

    data = get_posts_pr(field=temp_field,
                        page=page,
                        pre=pre,
                        sort=sort,
                        status=status,
                        time_range=time_range,
                        matching_rec=matching_rec,
                        keyword=keyword,
                        is_admin=True)

    return data
Exemple #2
0
def get_user_msgs(is_admin=None):
    """
    api获取消息
    :return:
    """

    data = {}
    ctype = json_to_pyseq(
        request.argget.all("type", ["notice", "private_letter"]))
    label = json_to_pyseq(request.argget.all("label"))
    pre = str_to_num(request.argget.all("pre", 10))
    page = str_to_num(request.argget.all("page", 1))
    status_update = request.argget.all("status_update")

    # admin api才有效的参数
    is_sys_msg = str_to_num(request.argget.all("is_sys_msg", 1))
    keyword = request.argget.all("keyword", "")

    q = {"type": {"$in": ctype}}
    if not is_admin:
        q["user_id"] = current_user.str_id
    else:
        if is_sys_msg:
            q["is_sys_msg"] = True
        else:
            q["is_sys_msg"] = False
        if keyword:
            keyword = {"$regex": keyword}
            q["$or"] = [{
                "title": keyword
            }, {
                "link": keyword
            }, {
                "content": keyword
            }]
    if label:
        q["label"] = {"$in": label}

    msgs = mdb_user.db.message.find(q)
    data_cnt = msgs.count(True)
    msgs = list(msgs.sort([("time", -1)]).skip(pre * (page - 1)).limit(pre))
    ids = [msg["_id"] for msg in msgs]
    data["msgs"] = objid_to_str(msgs)
    data["msgs"] = datas_paging(pre=pre,
                                page_num=page,
                                data_cnt=data_cnt,
                                datas=data["msgs"])

    if not is_admin:
        # user_id为真,表示非管理端获取消息. 标记为已通知
        q = {"user_id": current_user.str_id, "status": {"$ne": "have_read"}}
        data["msgs"]["more"] = get_unread_num(q)
        mdb_user.db.message.update_many(q, {"$set": {"status": "notified"}})
        if status_update:
            mdb_user.db.message.update_many({"_id": {
                "$in": ids
            }}, {"$set": {
                "status": status_update
            }})
    return data
Exemple #3
0
def get_posts():

    page = str_to_num(request.argget.all('page', 1))
    pre = str_to_num(request.argget.all('pre', get_config("post", "NUM_PAGE")))
    sort = json_to_pyseq(request.argget.all('sort'))
    status = request.argget.all('status', 'is_issued')
    matching_rec = request.argget.all('matching_rec')
    time_range = int(request.argget.all('time_range', 0))
    keyword = request.argget.all('keyword', '').strip()
    fields = json_to_pyseq(request.argget.all('fields'))
    unwanted_fields = json_to_pyseq(request.argget.all('unwanted_fields'))
    user_id = request.argget.all('user_id')
    category_id = request.argget.all('category_id')
    tag = request.argget.all('tag')

    # 不能同时使用fields 和 unwanted_fields
    temp_field = {}
    if fields:
        for f in fields:
            temp_field[f] = 1
    elif unwanted_fields:
        for f in unwanted_fields:
            temp_field[f] = 0

    other_filter = {}
    if user_id:
        # 获取指定用户的post
        other_filter["user_id"] = user_id

    # 如果category_id为None, 则获取全部分类文章
    if category_id:

        try:
            ObjectId(category_id)
            # 指定分类
            other_filter["category"] = category_id
        except BaseException:
            # 默认文集
            other_filter["category"] = None

    if tag:
        other_filter["tags"] = tag
    data = get_posts_pr(page=page,
                        field=temp_field,
                        pre=pre,
                        sort=sort,
                        status=status,
                        time_range=time_range,
                        matching_rec=matching_rec,
                        keyword=keyword,
                        other_filter=other_filter)
    return data
Exemple #4
0
    def get(self, key, db_type=None):
        '''
        获取一个cache
        :param key:
        :param db_type: 不使用系统设置的db type时指定类型mongodb或redis
        :return:default:获取不到时返回
        '''

        key = "{}{}".format(self.config['CACHE_KEY_PREFIX'], key)
        if not db_type:
            if self.config["CACHE_TYPE"] == "redis":
                value = self.redis.get(key)
                if value:
                    value = json_to_pyseq(value.decode("utf-8"))
                    return value
                # 防止value为None时, 所以查询不到缓存时, 使用cache空类
                return self.cache_none

            else:
                value = self.mdb_coll.find_one({"key": key}, {"_id": 0})
                if value and value["expiration"] < time.time():
                    # 已过期
                    self.delete(key, db_type=db_type)
                    return self.cache_none
                elif value:
                    return value["value"]

                # 防止value为None时, 所以查询不到缓存时, 使用cache空类
                return self.cache_none
        else:
            if db_type == "redis":
                value = self.redis.get(key)
                if value:
                    value = json_to_pyseq(value.decode("utf-8"))
                    return value
                # 防止value为None时, 所以查询不到缓存时, 使用cache空类
                return self.cache_none

            elif db_type == "mongodb":

                value = self.mdb_coll.find_one({"key": key}, {"_id": 0})
                if value and value["expiration"] < time.time():
                    # 已过期
                    self.delete(key, db_type=db_type)
                    return self.cache_none
                elif value:
                    return value["value"]

                # 防止value为None时, 所以查询不到缓存时, 使用cache空类
                return self.cache_none
Exemple #5
0
def sign_in():

    username = request.argget.all('username', '').strip()
    password = request.argget.all('password', '').strip()
    code = request.argget.all('code', '').strip()
    code_url_obj = json_to_pyseq(request.argget.all('code_url_obj', {}))
    remember_me = request.argget.all('remember_me', 0)
    use_jwt_auth = str_to_num(request.argget.all('use_jwt_auth', 0))
    try:
        remember_me = int(remember_me)
    except BaseException:
        data = {
            "d_msg": gettext("remember_me requires an integer"),
            "d_msg_type": "e",
            "custom_status": 400
        }
        return data

    data = p_sign_in(username=username,
                     password=password,
                     code_url_obj=code_url_obj,
                     code=code,
                     remember_me=remember_me,
                     use_jwt_auth=use_jwt_auth)

    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
Exemple #7
0
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
Exemple #8
0
def category_delete(user_id=None):

    if user_id == None:
        user_id = current_user.str_id
    ids = json_to_pyseq(request.argget.all('ids', []))
    if not isinstance(ids, list):
        ids = json.loads(ids)

    for i in range(0, len(ids)):
        ids[i] = ObjectId(ids[i])
    r = mdb_web.db.category.delete_many({
        "_id": {
            "$in": ids
        },
        "user_id": user_id
    })
    if r.deleted_count > 0:
        data = {
            "msg": gettext("Delete the success,{}").format(r.deleted_count),
            "msg_type": "s",
            "http_status": 204
        }
    else:
        data = {
            "msg": gettext("Delete failed"),
            "msg_type": "w",
            "http_status": 400
        }
    return data
Exemple #9
0
def adm_post_restore():

    ids = json_to_pyseq(request.argget.all('ids', []))
    for i, tid in enumerate(ids):
        ids[i] = ObjectId(tid)
    r = mdb_web.db.post.update_many({
        "_id": {
            "$in": ids
        },
        "is_delete": 3
    }, {"$set": {
        "is_delete": 0
    }})
    if r.modified_count:
        data = {
            "msg": gettext("Restore success, {}").format(r.modified_count),
            "msg_type": "s",
            "http_status": 201
        }
    else:
        data = {
            "msg": gettext("No match to relevant data"),
            "msg_type": "w",
            "http_status": 400
        }

    return data
Exemple #10
0
def post_restore():

    ids = json_to_pyseq(request.argget.all('ids', []))
    if not isinstance(ids, list):
        ids = json.loads(ids)
    for i, tid in enumerate(ids):
        ids[i] = ObjectId(tid)

    r = mdbs["web"].db.post.update_one(
        {
            "_id": {
                "$in": ids
            },
            "user_id": current_user.str_id,
            "is_delete": 1
        }, {"$set": {
            "is_delete": 0
        }})
    if r.modified_count:
        data = {
            "msg": gettext("Restore success,{}").format(r.modified_count),
            "msg_type": "s",
            "custom_status": 201
        }
    else:
        data = {
            "msg": gettext("Restore failed"),
            "msg_type": "w",
            "custom_status": 400
        }
    return data
Exemple #11
0
def get_tags():
    """
    根据条件获取post tags
    :return:
    """
    last_days = str_to_num(request.argget.all('last_days', 360))
    user_id = request.argget.all('user_id')
    tlimit = str_to_num(request.argget.all('limit', 20))
    tsort = json_to_pyseq(request.argget.all('sort', [{"tag_cnt": -1},
                                                      {"like": -1},
                                                      {"comment_num": -1}]))
    # sort
    sort = {}
    for s in tsort:
        sort = dict(sort, **s)

    # 查看是否存在缓存
    cache_key = cache.get_autokey(
        fun="_get_tags",
        key_base64=False,
        db_type="redis",
        user_id=user_id,
        last_days=last_days,
        tlimit=tlimit,
        sort=sort)
    data = cache.get(key=cache_key, db_type="redis")
    if data != cache.cache_none:
        return data
    else:
        # 调用生成缓存程序生成新缓存
        async_get_tags(user_id, last_days, tlimit, sort)

        # 然后返回最后一次的长期缓存
        data = cache.get(key="LAST_POST_TAGS_CACHE", db_type="mongodb")
        return data
Exemple #12
0
def user_restore():
    ids = json_to_pyseq(request.argget.all('ids', []))
    noper = 0
    re_ids = []
    for i in range(0, len(ids)):
        # 检查是否有权限
        current_user_role = mdb_user.db.role.find_one({"_id": ObjectId(current_user.role_id)})
        re_user = mdb_user.db.user.find_one({"_id": ObjectId(ids[i])}, {"role_id": 1})
        re_user_role = mdb_user.db.role.find_one({"_id": ObjectId(re_user["role_id"])})
        if get_num_digits(current_user_role["permissions"]) <= get_num_digits(re_user_role["permissions"]):
            # 没有权限恢复
            noper += 1
            continue
        re_ids.append(ObjectId(ids[i]))

    update_data = {
        'is_delete': 0
    }

    r = mdb_user.db.user.update_many({"_id": {"$in": re_ids}}, {"$set": update_data})
    if r.modified_count:
        data = {'msg': gettext(
            "Restore the {} users,The other {} users have no power control".format(r.modified_count, noper)),
                'msg_type': "s", "http_status":201}
    else:
        data = {'msg': gettext("Restore the failure.May not have permission"), 'msg_type': "w", "http_status":401}
    return data
Exemple #13
0
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
Exemple #14
0
    def get(self, key, db_type=None):
        """
        获取一个cache
        :param key:
        :param db_type: 不使用系统设置的db type时指定类型mongodb或redis
        :return:default:获取不到时返回
        """

        key = "{}{}".format(self.config['CACHE_KEY_PREFIX'], key)
        if (db_type == "redis" or (not db_type and self.config["CACHE_TYPE"] == "redis")) \
                and not self.redis_exists_exception:
            value = self.redis.get(key)
            if value:
                value = value.decode("utf-8")
                if value == self.cache_none_obj.value:
                    return None
                value = json_to_pyseq(value)
                return value
            # 防止value为None所以查询不到缓存时, 使用cache空类
            return self.cache_none

        elif db_type == "mongodb" or (not db_type and self.config["CACHE_TYPE"] == "mongodb") \
                or self.redis_exists_exception:

            value = self.mdb_coll.find_one({"key": key}, {"_id": 0})
            if value and value["expiration"] < time.time():
                # 已过期
                self.delete(key, db_type=db_type)
                return self.cache_none
            elif value:
                return value["value"]

            # 防止value为None时, 所以查询不到缓存时, 使用cache空类
            return self.cache_none
Exemple #15
0
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
Exemple #16
0
def api_basic_report():
    '''
    GET:
        获取网站的最基本报表数据
        project:<array>,默认全部,可以是post, comment, user, message, plugin, media, inform

    '''
    project = json_to_pyseq(request.argget.all('project', []))

    data = {}
    if "post" in project or not project:
        data["post"] = get_post_access()

    if "comment" in project or not project:
        data["comment"] = get_comment_access()

    if "user" in project or not project:
        data["user"] = get_user_access()

    if "message" in project or not project:
        data["message"] = get_message()
    if "plugin" in project or not project:
        data["plugin"] = get_plugin()
    if "media" in project or not project:
        data["media"] = get_media()
    if "inform" in project or not project:
        data["inform"] = get_inform_data()
    return response_format(data)
Exemple #17
0
def user_del():
    ids = json_to_pyseq(request.argget.all('ids', []))
    permanent = request.argget.all('permanent', 0)
    try:
        permanent = int(permanent)
    except BaseException:
        pass
    noper = 0
    temp_ids = ids[:]
    ids = []
    for tid in temp_ids:
        # 检查是否有权限
        current_user_role = mdbs["user"].db.role.find_one({"_id": ObjectId(current_user.role_id)})
        rm_user = get_one_user(user_id=str(tid))
        rm_user_role = mdbs["user"].db.role.find_one({"_id": ObjectId(rm_user["role_id"])})
        if get_num_digits(current_user_role["permissions"]) <= get_num_digits(rm_user_role["permissions"]):
            # 没有权限删除
            continue
        ids.append(ObjectId(tid))

    if not permanent:
        update_data = {
            'is_delete': 1
        }
        r = mdbs["user"].db.user.update_many(
            {"_id": {"$in": ids}}, {"$set": update_data})
        if r.modified_count:
            for uid in ids:
                clean_get_one_user_cache(user_id=uid)

            data = {
                'msg': gettext("Has recovered {} users, {} users can not operate").format(
                    r.modified_count,
                    noper),
                'msg_type': "s",
                "custom_status": 201}
        else:
            data = {
                'msg': gettext("Recycle user failed.May not have permission"),
                'msg_type': "w",
                "custom_status": 401}
    else:
        # 永久删除
        r = mdbs["user"].db.user.delete_many(
            {"_id": {"$in": ids}, "is_delete": {"$in": [1, True]}})
        if r.deleted_count:
            data = {
                'msg': gettext(
                    "{} users have been deleted and {} users can not be deleted".format(
                        r.deleted_count,
                        noper)),
                'msg_type': "s",
                "custom_status": 204}
        else:
            data = {
                'msg': gettext("Failed to delete.May not have permission"),
                'msg_type': "w",
                "custom_status": 401}

    return data
Exemple #18
0
def user_activation():
    active = int(request.argget.all('active', 0))
    ids = json_to_pyseq(request.argget.all('ids', []))
    noper = 0
    ac_ids = []
    for i in range(0, len(ids)):
        # 检查是否有权限
        current_user_role = mdb_user.db.role.find_one({"_id": ObjectId(current_user.role_id)})
        re_user = mdb_user.db.user.find_one({"_id": ObjectId(ids[i])}, {"role_id": 1})
        re_user_role = mdb_user.db.role.find_one({"_id": ObjectId(re_user["role_id"])})
        if get_num_digits(current_user_role["permissions"]) <= get_num_digits(re_user_role["permissions"]):
            # 没有权限恢复
            noper += 1
            continue
        ac_ids.append(ObjectId(ids[i]))

    update_data = {
        'active': active
    }

    r = mdb_user.db.user.update_many({"_id": {"$in": ac_ids}}, {"$set": update_data})
    if r.modified_count:
        data = {'msg': gettext(
            "{} user activation is successful, {} no permission to operate".format(r.modified_count, noper)),
                'msg_type': "s", "http_status":201}
    else:
        data = {'msg': gettext("Activation failed.May not have permission"), 'msg_type': "w", "http_status":401}
    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
Exemple #20
0
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
Exemple #21
0
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
Exemple #22
0
def delete_sys_message():
    '''
    删除已发送邮件
    :return:
    '''

    ids = json_to_pyseq(request.argget.all("ids", []))
    for i in range(0, len(ids)):
        ids[i] = ObjectId(ids[i])
    q = {"_id": {"$in": ids}}

    r = mdb_sys.db.sys_message.delete_many(q)
    if r.deleted_count:
        data = {
            "msg": gettext("Successfully deleted"),
            "msg_type": "s",
            "http_status": 204
        }
    else:
        data = {
            "msg": gettext("Failed to delete"),
            "msg_type": "w",
            "http_status": 400
        }
    return data
Exemple #23
0
def adm_post_delete():

    ids = json_to_pyseq(request.argget.all('ids', []))
    pending_delete = int(request.argget.all("pending_delete", 1))
    for i, tid in enumerate(ids):
        ids[i] = ObjectId(tid)
    if pending_delete:
        r = mdb_web.db.post.update_many({"_id": {
            "$in": ids
        }}, {"$set": {
            "is_delete": 3
        }})
        if r.modified_count:
            data = {
                "msg":
                gettext("Move to a permanently deleted area, {}").format(
                    r.modified_count),
                "msg_type":
                "s",
                "http_status":
                204
            }
        else:
            data = {
                "msg": gettext("No match to relevant data"),
                "msg_type": "w",
                "http_status": 400
            }
    else:
        data = delete_post(ids=ids)
    return data
    def delete(self, key=None):
        """
        删除当前的session中的key
        :return:
        """

        if self.config["SESSION_TYPE"] == "redis":
            if key:
                temp_value = self.redis.get(self.sid)
                if temp_value:
                    temp_value = json_to_pyseq(temp_value.decode())
                    if key and key in temp_value:
                        del temp_value[key]
                        self.redis.set(self.sid, temp_value)
            else:
                self.redis.delete(self.sid)

        else:

            if key:
                se = self.mdb_coll.find_one({"id": self.sid})
                if se and key in se:
                    del se[key]
                    self.mdb_coll.update_one({"_id": se["_id"]}, {"$set": se})

            else:
                self.mdb_coll.delete_one({"id": self.sid})
Exemple #25
0
def delete_user_msgs(is_admin=None):
    """
    删除消息
    is_admin:为True 的话, 只能删除系统发出的消息
    :return:
    """

    ids = json_to_pyseq(request.argget.all("ids", []))
    for i, tid in enumerate(ids):
        ids[i] = ObjectId(tid)
    q = {"_id": {"$in": ids}}
    if not is_admin:
        q["user_id"] = current_user.str_id
    else:
        q["is_sys_msg"] = True

    r = mdb_user.db.message.delete_many(q)
    if r.deleted_count:
        data = {
            "msg": gettext("Successfully deleted"),
            "msg_type": "s",
            "http_status": 204
        }
    else:
        data = {
            "msg": gettext("Failed to delete"),
            "msg_type": "w",
            "http_status": 400
        }
    return data
Exemple #26
0
def delete_url():
    """
    删除url, 值允许删除页面路由
    :return:
    """
    ids = json_to_pyseq(request.argget.all("ids", []))

    for i, tid in enumerate(ids):
        ids[i] = ObjectId(tid)

    url_pers = list(mdbs["sys"].db.sys_urls.find(
        {"_id": {"$in": ids}}, {"url": 1}))
    r = mdbs["sys"].db.sys_urls.delete_many(
        {"_id": {"$in": ids}, "create": "manual"})
    if r.deleted_count:
        # 清除缓存
        for url_per in url_pers:
            cache.delete_autokey(
                fun="get_sys_url",
                db_type="redis",
                url=url_per['url'].rstrip("/"))

        data = {
            "msg": gettext("Successfully deleted"),
            "msg_type": "s",
            "custom_status": 204}
    else:
        data = {
            "msg": gettext("Delete failed"),
            "msg_type": "w",
            "custom_status": 400}
    return data
Exemple #27
0
def comments():
    target_id = request.argget.all('target_id')
    target_type = request.argget.all('target_type', "post")
    status = request.argget.all('status', "is_issued")
    sort = json_to_pyseq(request.argget.all('sort'))
    page = int(request.argget.all('page', 1))
    pre = get_config("comment", "NUM_PAGE")
    pre = int(request.argget.all('pre', pre))
    basic_query = {
        'issued':
        1,
        'is_delete':
        0,
        'type':
        target_type,
        "target_id":
        target_id,
        '$or': [{
            'reply_id': {
                '$exists': False
            }
        }, {
            'reply_id': {
                '$in': [None, ""]
            }
        }]
    }
    data = find_comments(query_conditions=basic_query,
                         page=page,
                         pre=pre,
                         sort=sort,
                         status=status)
    return data
def category_delete(user_id=None):

    if user_id is None:
        user_id = current_user.str_id
    ids = json_to_pyseq(request.argget.all('ids', []))
    if not isinstance(ids, list):
        ids = json.loads(ids)

    for i, tid in enumerate(ids):
        ids[i] = ObjectId(tid)
    r = mdbs["web"].db.theme_category.delete_many({
        "_id": {
            "$in": ids
        },
        "user_id": user_id
    })
    if r.deleted_count > 0:
        data = {
            "msg": gettext("Delete the success,{}").format(r.deleted_count),
            "msg_type": "s",
            "custom_status": 204
        }
    else:
        data = {
            "msg": gettext("Delete failed"),
            "msg_type": "w",
            "custom_status": 400
        }
    # theme_name = get_config("theme", "CURRENT_THEME_NAME")
    theme_name = g.get_config("theme", "CURRENT_THEME_NAME")
    data["theme_name"] = theme_name
    return data
    def get(self, key=None, default=None):
        """
        获取一个session
        :param key:
        :return:default:获取不到时返回
        """
        if self.config["SESSION_TYPE"] == "redis":
            temp_value = self.redis.get(self.sid)
            if temp_value:
                temp_value = json_to_pyseq(temp_value.decode())
                if key and key in temp_value:
                    return temp_value[key]
                elif key:
                    return None
                else:
                    return temp_value

        else:
            query = {"id": self.sid}
            if key:
                query[key] = {"$exists": True}
                value = self.mdb_coll.find_one(query, {key: 1})
                if value:
                    return value[key]
            else:
                value = self.mdb_coll.find_one(query, {"_id": 0})
                if value:
                    return value
        return default
Exemple #30
0
def adm_comment_delete():

    ids = json_to_pyseq(request.argget.all('ids', []))
    pending_delete = int(request.argget.all("pending_delete", 1))

    for i, tid in enumerate(ids):
        ids[i] = ObjectId(tid)
    if pending_delete:
        r = mdb_web.db.comment.update_many(
            {"_id": {"$in": ids}}, {"$set": {"is_delete": 2}})
        if r.modified_count:
            data = {"msg": gettext("Move to a permanently deleted area, {}").format(
                r.modified_count), "msg_type": "s", "http_status": 204}
        else:
            data = {
                "msg": gettext("Does not match the data to be deleted"),
                "msg_type": "w",
                "http_status": 400}
    else:
        for tid in ids:
            mdb_user.db.user_like.update_many({"type": "comment", "values": str(tid)},
                                              {"$pull": {"values": str(tid)}})
        r = mdb_web.db.comment.delete_many(
            {"_id": {"$in": ids}, "is_delete": {"$in": [1, 2]}})
        if r.deleted_count:
            data = {"msg": gettext("Removed from the database, {}").format(
                r.deleted_count), "msg_type": "s", "http_status": 204}
        else:
            data = {"msg": gettext("No match to relevant data"),
                    "msg_type": "w", "http_status": 400}
    return data