一、概述
距离上一篇帖子过去了将近一年的时间,主要原因是因为这一年刚加入新公司,入职了一个新的行业,所以需要花时间学习新的业务知识,最近才有时间去探索上一篇帖子说的自动化平台的开发,这次只是先做了一下可行性研究,详细如下
二、前端设计
只做了基本的几个控件, 在文本框内输入要生成的文件数量,点击生成后在相应的目录下生成对应的文件
对应的代码也很简单,就一个from表单,如下:
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>测试文件生成页</title> 6 </head> 7 <body> 8 <form action="/result" method="post"> 9 TXT: <input type="text" name="txt" style="80px"> 10 <br> 11 JPG: <input type="text" name="jpg" style="80px"> 12 <br> 13 PDF: <input type="text" name="pdf" style="80px"> 14 <br> 15 EXEC: <input type="text" name="exec" style="80px"> 16 <br><br> 17 <input type="submit" value="生成" style="130px"> 18 </form> 19 </body> 20 </html>
三、后台逻辑
之前打算用Django实现,但目前项目组用的都是tornado,所以这次使用tornado来实现
tornado教程:http://demo.pythoner.com/itt2zh/index.html
tornado官方文档:http://www.tornadoweb.org/en/stable/
后台源码:
逻辑很简单,获取前端txt文本框的值,如果值不为空,则生成对应数量的测试文件
1 #!/usr/bin/env python 2 # coding:utf-8 3 import tornado.httpserver 4 import tornado.ioloop 5 import tornado.options 6 import tornado.web 7 import tornado.escape 8 import os 9 import time 10 11 from tornado.options import define, options 12 13 define("port", default=8004, help="run on the given port", type=int) 14 15 PATH = "D:/test_data/" 16 17 18 def create_txt(path=PATH, file_num=1, file_size=8): 19 """ 20 :param path: 测试文件的存放路径 21 :param file_num: 需要生成的数量 22 :param file_size: 每个文件的大小,以KB为单位 23 """ 24 if not os.path.exists(path): 25 os.mkdir(path) 26 for i in range(file_num): 27 file_name = "test_txt_"+str(i)+".txt" 28 data = "test_t"+str(time.localtime()) 29 with open(os.path.join(path, file_name), 'w') as f_obj: 30 for j in range(8*file_size): 31 f_obj.write(data) 32 print("create file: test_txt_(0-%d).txt in path %s success, file size: %sKB" % (file_num, path, file_size)) 33 34 35 class MainHandler(tornado.web.RequestHandler): 36 def get(self): 37 self.render("index.html") 38 39 40 class Resultandler(tornado.web.RequestHandler): 41 def post(self): 42 txt_num = self.get_argument("txt") 43 if str(txt_num) != "": 44 create_txt(file_num=int(txt_num)) 45 46 47 if __name__ == "__main__": 48 handlers = [ 49 (r"/", MainHandler), 50 (r"/result", Resultandler), 51 ] 52 template_path = os.path.dirname(__file__) + "/" + "template" 53 tornado.options.parse_command_line() 54 print("application is running") 55 app = tornado.web.Application(handlers, template_path) 56 http_server = tornado.httpserver.HTTPServer(app) 57 http_server.listen(options.port) 58 tornado.ioloop.IOLoop.instance().start()
四、结果
如果做过web开发的朋友应该知道,这样生成的文件是存放在服务器端的,而我最初的设想是直接在客户端生成的,这样就与设计不符,方案缺少可行性
五、其他
1、跟同事一起讨论 建议先在服务器上生成,然后在下载到用户的电脑,这样技术上可行,但实现就复杂了,而且如果需要的文件数量多且文件较大,传输的时间会很长
2、虽然次方案不能准备测试文件,但生成多个文件的分享地址还是能实现的,平台基本的结构就是这样了,还在学习当中,欢迎高手指点!