"""
此模块假定读写本地同一个数据库plot。
测试URL:
http://localhost:8080/
读取plot数据库的traffic集合的所有文档,并构造成json字符串返回。
http://localhost:8080/read/traffic
清空traffic集合,并重新写入一条文档,post方式。
http://localhost:8080/write/traffic
"""
from pymongo import MongoClient
# from pprint import pprint
import json
import web
# 以下两行代码,放到if __name__ == "__main__":下会报错。
# 不知原因。
client = MongoClient()
# 确定数据库plot。
db = client.plot
urls = (
r'/', 'Index',
r'/read/(\w+)', 'ReadPlotTraffic',
r'/write/(\w+)', 'WritePlotTraffic'
)
class Index:
def GET(self):
return "Hello, world!"
class ReadPlotTraffic:
def GET(self, collectionName):
web.header("Access-Control-Allow-Origin", "*")
web.header('content-type', 'text/json; charset=utf-8')
# doc = db[collectionName].find_one({}, {"_id": 0})
doc = db[collectionName].find({}, {"_id": 0})
features = []
for feature in doc:
features.append(feature)
return json.dumps({"type": "FeatureCollection", "features": features})
class WritePlotTraffic:
def POST(self, collectionName):
web.header("Access-Control-Allow-Origin", "*")
# 删除collectionName集合。
db[collectionName].drop()
# 获取前端post方式提交的数据。
i = web.input()
dataDict = json.loads(i.data)
# 插入多条数据。
db[collectionName].insert_many(dataDict["features"])
return "done!"
if __name__ == "__main__":
app = web.application(urls, globals())
app.run()