python代码如下:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
#@TIME :2019/11/18 18:52
from flask import Flask
import MongoDB as mgdb
import traceback
import json
def test():
return "{'result': 'ok'}"
def search_common(db, collection, raw_query):
mongo = mgdb.Mongo(db)
res= mongo.search_common(collection, raw_query)
result = json.dumps({'result': res}, ensure_ascii=False, sort_keys=True)
result = result.encode('utf-8')
return result
def store_docs(db, collection):
mongo = mgdb.Mongo(db)
data = request.get_data()
if type(data) == bytes:
data = data.decode('utf8')
if data == '':
return "{'result': 'data null'}"
try:
data = json.loads(data)
except:
traceback.print_exc()
return "{'result': 'data format error : not json'}"
if type(data) != dict:
return "{'result': 'data format error : not dict'}"
data = mongo.store_docs(collection)
result = json.dumps({'result': data}, ensure_ascii=False, sort_keys=True)
result = result.encode('utf-8')
return result
Methods = {
'test': test,
'common_search': common_search,
'store_docs': store_docs,
}
app = Flask(__name__)
@app.route('/<method>/<db>/<collection>', methods = ['GET', 'POST'])
def method_1(method, db, collection):
if method not in Methods:
return 'Method error!'
return Methods[method](db, collection)
@app.route('/<method>/<db>/<collection>/<raw_query>', methods = ['GET','POST'])
def method_2(method):
if method not in Methods:
return 'Method error!'
if type(raw_query) == bytes:
raw_query = raw_query.decode('utf-8')
try:
raw_query = json.loads(raw_query)
except:
traceback.print_exc()
return "{'result': 'query format error'}"
if type(raw_query) != dict:
return "{'result': 'query format error'}"
return Methods[method](db, collection, raw_query)
if __name__ == '__main__':
app.run(host='0.0.0.0', port=4321, debug=True)
#!/usr/bin/env python
# -*- coding:utf-8 -*-
#@TIME :2019/11/18 18:52
from bson import ObjectId
import pymongo
import traceback
def obj2str(doc):
if '_id' in doc:
doc['_id'] = str(doc['_id'])
return doc
class Mongo(object):
def __init__(self, db_name):
self.db_name = db_name
self.client = pymongo.MongoClient('mongodb://' + InterfaceConfig.MongoDB_URL, 27017)
self.db = self.client[self.db_name]
def common_search(self, collection, raw_query):
try:
if 'query' in raw_query:
query = raw_query['query']
if 'fields' in raw_query and raw_query['fields'] != []:
fields = {}
for key in raw_query['fields']:
fields[key] = 1
if '_id' not in raw_query['fields']:
fields['_id'] = 0
data = [obj2str(doc) for doc in self.db[collection].find(query, fields)]
else:
data = [obj2str(doc) for doc in self.db[collection].find(query)]
return data
except:
traceback.print_exc()
return None
def store_docs(self, collection, data):
try:
for doc in data:
if doc['cmd'] == 'create':
doc.pop('cmd')
if '_id' in doc:
doc.pop('_id')
corpus_id = self.db[collection].insert(doc)
elif doc['cmd'] == 'delete':
doc.pop('cmd')
self.db[collection].delete_one({'_id': ObjectId(doc['_id'])})
elif doc['cmd'] == 'update':
doc.pop('cmd')
self.db[collection].update_one({'_id': ObjectId(doc['_id'])}, {'$set': doc})
else:
return "cmd error"
return 'ok'
except:
traceback.print_exc()
return 'error'
if __name__ == '__main__':
print('hello world!')
url
http://127.0.0.1:4321/common_search/db_name/collection_name/{"query":{},"fields":["_id"]}