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)