机器学习和生物信息学实验室联盟

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2728|回复: 2
打印 上一主题 下一主题

Python的Flask框架:光速搭网站

[复制链接]
跳转到指定楼层
楼主
发表于 2016-11-3 22:50:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一直在寻思着做一个类似于weka的强大的机器学习工作,与weka不同的地方是,它比较泛,而我想针对我们生物信息学中常见的不平衡分类,多标签,层次多标签,PCA降维,格式转换等实用的问题来做,而且要有一个易用美观的图形界面,并且后期易于维护,易于拓展更多功能。

看了weka写GUI和python写GUI的代码,觉得代码量很多,后期维护肯定困难。于是,我想到直接将它做成python网站,既可以部署到服务器上给用户访问,在本地一键安装flask环境后即可双击运行网站,相比java网站需要部署tomcat设置环境变量要好很多。此外,由于本地不限制文件处理的大小,体验应该是很好的。还有就是UI设计与交互,技术非常多,选型更加多元化。最后,最关键的一点是,flask写网站非常简单迅速,代码量非常少,日后维护起来也方便。

1. 安装Flask
安装Flask非常简单。若已安装好python环境,那么只需在windows终端或linux终端运行:
  1. pip install flask
复制代码

保证电脑已经联网,稍等两分钟就安装好了。

2. 使用示例

直接贴代码,我写有精炼的注释。就这么十几行,包含了获取前台粘贴内容、上传文件内容、显示键值对结果的方法。

2.1 后台的hello.py:
  1. # coding=utf-8

  2. from flask import Flask, request
  3. from flask import render_template

  4. app = Flask(__name__)

  5. # 默认路由,http://your_ip_address/
  6. @app.route('/')
  7. def index():
  8.     return render_template('hello.html')

  9. # 前台写的粘贴文件方法,POST传输
  10. @app.route('/paste', methods=['GET', 'POST'])
  11. def paste_method():
  12.     if request.method == 'POST':
  13.         paste = request.form['paste']
  14.         return render_template('hello.html', name={'1': '2'}, paste=paste)
  15.     return render_template('hello.html')

  16. # 前台写的上传文件方法,POST传输;上传后文件写入file.txt文件
  17. @app.route('/upload', methods=['GET', 'POST'])
  18. def upload_method():
  19.     if request.method == 'POST':
  20.         upload = request.files['files']
  21.         upload.save('file.txt')
  22.         return render_template('hello.html', name={'1': '2'}, paste=u"上传成功")
  23.     return render_template('hello.html')

  24. # 默认写法
  25. if __name__ == '__main__':
  26.     app.run()
复制代码


2.2 前台的hello.html:
  1. <!doctype html>
  2. <title>Hello from Flask</title>

  3. <!--<form action="paste" method="post" enctype="multipart/form-data">
  4.     <textarea name="paste" rows="3" cols="20">
  5.     这里放用户粘贴的内容,例如蛋白质
  6.     </textarea>
  7.     <button type="submit">submit</button>
  8. </form>-->

  9. <form action="upload" method="post" enctype="multipart/form-data">
  10.     <input type="file" name="files">
  11.     <button type="submit">submit</button>
  12. </form>

  13. <!-- 前台的判断语法,若后台有name值传入,则显示相应内容,包括键值对类型;否则只显示Hello World! -->
  14. {% if name %}
  15.     <h1>{{ paste }}</h1>
  16.     {% for key in name %}
  17.       <li><a href="">{{ key }}, {{ name[key] }}</a></li>
  18.     {% endfor %}
  19. {% else %}
  20.   <h1>Hello World!</h1>
  21. {% endif %}
复制代码


以上文件结构截图如下:



运行hello.py,网站就启动了。当然,在本地测试时这样足够了。如果要部署到服务器上,就可以用更专业的容器,Nginx这种,框架flask不变。

Flask教程地址:http://docs.jinkan.org/docs/flask/quickstart.html#quickstart

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享
回复

使用道具 举报

沙发
发表于 2016-12-21 00:20:22 | 只看该作者
这个很牛逼啊。在服务器上可不可以也这么简单?

应该想个办法,使得类似的网站都可以一键部署。直接放到我们的服务器上,用户只需要修改几处代码,放上来几个model文件就可以。
回复 支持 反对

使用道具 举报

板凳
 楼主| 发表于 2016-12-21 21:44:55 | 只看该作者
对的,我就是这样的规划,用户只需要写好输入文件jar包,输出文件展示格式,网站就自动生成。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

机器学习和生物信息学实验室联盟  

GMT+8, 2024-11-23 05:04 , Processed in 0.072191 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表