PyObjC for iphone

The PyObjC project aims to provide a bridge between the Pyth ...

↑我也要推荐

基于 Tornado 的文件共享应用 FileHub

发布时间:2013-06-16 23:01:05, 关注:+4964, 赞美:+11, 不爽:+3

原始出处: Pandora

最近做了一个文件共享的 web 应用,FileHub。

缘起

起初想学习一下 Tornado 这个框架,在网上看到一篇文章后,觉得挺有意思。实验室平时也确实有许多东西要共享,于是就开始着手实现。(坑 T_T 见下文)

实现

后端自然用的 Tornado 的 web 框架和模板引擎,它的异步特性还没有研究;数据库用了 SQLite,这样只要有 Python 环境就可以直接跑起来;前端用了 Pure+ jQuery,前者是雅虎新开源的一个纯 CSS 模块,比 Bootstrap 轻量太多,对我来说足够用了。

前端的拖拽上传、多文件上传等功能用了 jQuery File Upload 这个插件;后端用了 nginx upload module 插件。花了挺多时间在这两个插件的文档阅读和配置上。

Tornado 的文档是直接用 docstring 生成的,非常简洁清晰,看到含糊的地方可以直接跳到源代码去读,上手很快。之前一直用 Django,对比起来,Django 文档的可读性就太差了,到现在一想到读它的文档还头疼。

现在的实现版本可以无缝切换是用 nginx 还是 Tornado 来处理上传和下载。之前很满意这个功能,现在却觉得有点儿累赘(见下文)。

问题

1)功能拆分

尽管是个业余小项目,但在做的过程中发现也得想点儿办法才能推动的好  。

这个应用前后做了两周,但第一周的进度很缓慢,因为并没有一份现成的设计文档,前后端也都是自己写,所以就一边写代码一边想功能点,最后发现完全抓不住重点,效率非常低。典型的表现是功能想到一半,就开始纠结变量名了……

所以这个问题还没有小到不需要拆分的程度。于是开始把功能点重新罗列一遍,排列好优先级,把每个功能将涉及到的工作都写下来,然后从上到下逐一解决,每做完一项划掉一项。这样既能有整体的把握,又能放心专注于细节的实现。

很简单,但很重要。

2)用户和需求

虽然是为了熟悉 Tornado,但做到中间还是发现,如果没有定义好要解决的问题,很多决策都没法做。要不要多文件上传?要不要打包下载?要不要用户系统?要不要在数据库中存目录结构?等等。要回答这些问题,都需要首先搞清楚,这个产品要解决什么问题。且不说这个问题是不是真实存在,以及是否有更好的解决办法。

所以想到这点还是十分忧桑的,说到底,还是希望有比“学习 Tornado ”更好的理由。

当然有了,只是不那么确信,而且好像也不是做这个东西的出发点。

文件分享可以用 FTP,百度网盘的速度也还行,为什么要用 FileHub 呢?比 FTP 用起来更方便,跑在学校机器上所以速度超快,容量也不受限,功能可以有无限的扩展性……确实,不过得交由使用者来评判了。

3)简单原则

Tornado 的上传有个硬伤,就是受制于机器本身的内存(据说啊),看到网上有人推荐 nginx 的一个插件,于是就用了这个。现在想,这真不是一个明智的选择,对于一个小团队用的工具,引入 nginx 真是一个累赘和败笔,因为安装第三方的插件需要重新编译 nginx,这个成本好像有点儿高(太麻烦)。

肯定有很好的 Python 处理大文件上传的实现,应该选择最简单的实现方式,给用户最简单的使用体验。

后续

还准备实现一些有趣的功能,不过现在已经可以正常使用了。

Github地址:https://github.com/makto/filehub

求 code review,求吐槽,Issue 里就挺好的。

最后放一张弱弱的截屏。

如果你觉得本站对你有帮助,欢迎向本站赞助 :P

使用支付宝捐赠

Copyright© Python4cn(news, jobs) simple-is-better.com, 技术驱动:powered by web.py 空间主机:Webfaction

版权申明:文章转载已注明出处,如有疑问请来信咨询。本站为 python 语言推广公益网站,与 python 官方没有任何关系。

联系/投搞/留言: en.simple.is.better@gmail.com 向本站捐赠