mongo 增删改通用接口

class MethodMongo():
    def __init__(self, request):
        self.request = request
        self.parameter_list = [ "link"]
        self.db = self.request.app['db']
        self.created_at = time.strftime("%Y-%m-%d %H-%M-%S", time.localtime())
        self.collection = "customized_services"

    def return_response(self, status, error=None, data=None, **kwargs):
        where = {"status": status, "error": error}
        if data:
            where.update({"data": data})
            where.update(kwargs)
        return web.json_response(where)

    def parameter_verification(self, form_data, **kwargs):
        # 校验参数必有字段
        if ([key for key, value in form_data.items() if key not in self.parameter_list]):
            return web.json_response({"status": False, "error": "parameter not exist."})
        # 必传参数,没传
        elif [value for key, value in kwargs.items() if not value]:
            return self.return_response(False, "Required_parameter_not_transmitted")
        else:
            return None

    def get_id(self, x):
        x['id'] = str(x.pop('_id'))
        return x

    def get_count(self, number, where=None):
        # 查询数量
        if not where:
            where = {}
        data_count = self.db[self.collection].count_documents(where)
        if number:
            number = int(number)
        else:
            number = data_count
        return number

    def post_data(self, form_data):
        # 校验参数
        link = form_data.get("link")
        parameter = self.parameter_verification(form_data, link=link)
        if not parameter:
            # 查询数据库中改数据是否存在
            custom_data = await self.db[self.collection].find_one(form_data, {'_id': 0})
            if not custom_data:
                form_data.update({"created_at": self.created_at})
                insert_data = await self.db[self.collection].insert_one(form_data)
                form_data.pop('created_at')
                form_data.pop('_id')
                id = str(insert_data.inserted_id)
                if id:
                    return self.return_response(True, data=form_data)
                else:
                    return self.return_response(False, error="insert_fail")
            return self.return_response(True, data=custom_data)
        return parameter

    def get_data(self, id=None, where={}, page=1, number=None):
        number = await self.get_count(number, where)
        if id:
            # 单条查询
            where = {"_id": ObjectId(id)}
            custom_data = await self.db[self.collection].find_one(where, {'_id': 0})
            return self.return_response(True, data=custom_data)
        else:
            # 多条查询
            custom_data = await self.db[self.collection].find(where).sort([('created_at', 1)]).skip(
                (page - 1) * number).limit(
                number).to_list(length=number)
            custom_data = list(map(self.get_id, custom_data))
            return self.return_response(True, data=custom_data, count=number)

   def put_data(self, id, form_data):
        # 校验参数
        link = form_data.get("link")
        parameter = self.parameter_verification(form_data, link=link, id=id)
        if not parameter:
            contracts_data = await self.db[self.collection].find_one_and_update({"_id": ObjectId(id)}, {"$set": form_data})
            if contracts_data:
                contracts_data.pop('_id')
                contracts_data.update(form_data)
                return self.return_response(True, data=contracts_data)
            return self.return_response(False, error="no_data")
        else:
            return parameter

    def delete_data(self, id):
        if id:
            delete_data = await self.db[self.collection].find_one_and_delete({"_id": ObjectId(id)})
            if delete_data:
                return self.return_response(True, data={"id": id})
        return self.return_response(False)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值