# -*- coding: utf-8 -*- """ demeter web page name:work.py author:rabin """ from .__load__ import * class Common(object): @staticmethod def signature(self): key = self.input('key') nonce = self.input('nonce') signature = self.input('signature') file = self.input('file') if not key: self.out('参数错误:key') if not nonce: self.out('参数错误:nonce') if not signature: self.out('参数错误:signature') if not file: self.out('参数错误:file') site = Demeter.model('site') site.key = key self.data['site'] = site.select(type='fetchone') if not self.data['site']: self.out('站点信息不存在') key = key + '&' + self.data['site']['token'] + '&' + nonce + '&' + file key = Demeter.md5(key) if key != signature: self.out('验证失败') class test_path(Load): @Web.setting def get(self): import csv,codecs from datetime import * file_name = 'test.csv' day = str(date.today()) day = day.split('-') file_path = day[0] + '/' + day[1] + '/' + day[2] file_path = File.mkdirs(os.path.join(Demeter.path, 'runtime','upload', file_path)) + '/' + file_name data = [{'data': {'rows': [['2017-11-01 00:02:27', 10.95], ['2017-11-01 00:07:27', 9.45], ['2017-11-01 00:12:27', 9.4], ['2017-11-01 00:17:27', 9.45], ['2017-11-01 00:22:27', 9.45], ['2017-11-01 00:27:27', 9.35], ['2017-11-01 00:32:27', 9.35], ['2017-11-01 00:37:27', 9.25], ['2017-11-01 00:42:27', 9.3], ['2017-11-01 00:47:27', 10.55], ['2017-11-01 00:52:27', 9.55], ['2017-11-01 00:57:31', 9.25]], 'value': '[10.95, 9.45, 9.4, 9.45, 9.45, 9.35, 9.35, 9.25, 9.3, 10.55, 9.55, 9.25]', 'time': '["2017-11-01 00:02:27", "2017-11-01 00:07:27", "2017-11-01 00:12:27", "2017-11-01 00:17:27", "2017-11-01 00:22:27", "2017-11-01 00:27:27", "2017-11-01 00:32:27", "2017-11-01 00:37:27", "2017-11-01 00:42:27", "2017-11-01 00:47:27", "2017-11-01 00:52:27", "2017-11-01 00:57:31"]'}, 'name': '\xe6\x98\x8e\xe7\xbb\x86'}] data1 = [{'data': {'rows': [['2017-11-01 00:07:27', 3.45], ['2017-11-01 00:12:27', 4.4], ['2017-11-01 00:17:27', 6.45], ['2017-11-01 00:22:27', 5.45], ['2017-11-01 00:27:27', 5.35], ['2017-11-01 00:32:27', 3.35], ['2017-11-01 00:37:27', 3.25], ['2017-11-01 00:42:27', 4.3], ['2017-11-01 00:47:27', 3.55], ['2017-11-01 00:52:27', 4.55], ['2017-11-01 00:57:31', 5.25]], 'value': '[10.95, 9.45, 9.4, 9.45, 9.45, 9.35, 9.35, 9.25, 9.3, 10.55, 9.55, 9.25]', 'time': '["2017-11-01 00:02:27", "2017-11-01 00:07:27", "2017-11-01 00:12:27", "2017-11-01 00:17:27", "2017-11-01 00:22:27", "2017-11-01 00:27:27", "2017-11-01 00:32:27", "2017-11-01 00:37:27", "2017-11-01 00:42:27", "2017-11-01 00:47:27", "2017-11-01 00:52:27", "2017-11-01 00:57:31"]'}, 'name': '\xe6\x98\x8e\xe7\xbb\x86'}] datad = {} for t,v in data[0]['data']['rows']: if t not in datad: datad[t] = [t,v] else: datad[t].append(v) newdata = sorted(datad.keys()) newds = [] for i in newdata: newds.append(datad[i]) datad = newds header = ['日期', '温度', '湿度'] datad.insert(0, header) date = '日期' datas = [[date, 'dfdf'], ['Bob', 14], ['Tom', 23], ['Jerry', '18']] #self.set_header("Content-Type","text/csv,charset=UTF-8") #self.set_header('Content-Disposition', 'attachment; filename=' + file_name) with open(file_path, 'w') as f: f.write(codecs.BOM_UTF8) writer = csv.writer(f) for row in datad: writer.writerow(row) url = self.request.protocol + "://" + self.request.host file_path = url + file_path.replace(Demeter.path + 'runtime', '') self.redirect(file_path) #self.out('yes', datad) # 请求转换 /main/convert 接口必须后端获取,token不允许暴露 class convert_path(Load): @Web.setting def get(self): file = self.input('file') self.data = {} Common.signature(self) service = Demeter.service('convert') file = service.update(self.data['site']['id'], self.data['site']['key'], file) if not file: self.out('未生成文件信息') # 推入到redis队列 if file['status'] == 1: redis = Demeter.redis() config = Demeter.config['redis'] redis.rpush(config['name'], file['id']) del self.data['site']['token'] url = self.request.protocol + "://" + self.request.host self.data['file'] = { 'id' : file['id'], 'status' : file['status'], 'url' : url + file['url'], 'ext' : file['ext'], 'name' : file['name'], 'key' : file['key'] } self.out('yes', self.data) # 获取信息 后端接口,token不允许暴露 class get_path(Load): @Web.setting def get(self): file = self.input('file') self.data = {} Common.signature(self) service = Demeter.service('convert') file = service.get(self.data['site']['id'], self.data['site']['key'], file); if not file: self.out('未生成文件信息') del self.data['site']['token'] url = self.request.protocol + "://" + self.request.host self.data['file'] = { 'id' : file['id'], 'status' : file['status'], 'url' : url + file['url'], 'page' : file['page'], 'ext' : file['ext'], 'name' : file['name'], 'key' : file['key'] } self.out('yes', self.data) # 授权用户可以访问html的接口 后端接口,token不允许暴露 后续实现 class auth_path(Load): @Web.setting def get(self): key = int(self.input('site', 1)) user = self.input('user') token = self.input('token') file = self.input('file') site = Demeter.model('site') site.key = key data = {} data['site'] = site.select(type='fetchone') if not file: self.out('错误的文件信息') if not data['site']: self.out('站点信息不存在') if data['site']['token'] != token: self.out('验证失败') service = Demeter.service('convert') data['file'] = service.get(data['site']['id'], key, file); # 授权之后生成一个key,用于前端权限验证 self.out('yes', data) # 读取html 带有权限控制 该接口为前端接口 需要有授权接口 后续实现 class view_path(Load): @Web.setting def get(self): key = int(self.input('site', 1)) token = self.input('token') file = self.input('file') site = Demeter.model('site') site.key = key data = {} data['site'] = site.select(type='fetchone') if not file: self.out('错误的文件信息') if not data['site']: self.out('站点信息不存在') if data['site']['token'] != token: self.out('验证失败') service = Demeter.service('convert') data['file'] = service.get(data['site']['id'], key, file); self.out('yes', data)