玩玩Tornado,写了一个网络相册分享照片

Tornado是一个用python写的小巧的开源网站服务器。安装来玩了一下,的确很强大,响应速度很快!这东西是Facebook开发的,但奇怪的是官网 http://www.tornadoweb.org/ 的IP查出来却是Google的呢,难怪连华工的校园网也能连上了。

花了一晚时间,写了如下的一个Web相册,用来分享照片给同学 🙂 可见开发效率之高,o(∩∩)o…哈哈,代码量也很少。

界面简简单单的,功能挺实用。

目录浏览功能:

幻灯片浏览功能:

帅吧!!!

我在服务器上也跑了一个tornado,可以用来浏览我的博客的图片。

http://gallery.xiaoxia.org/

这东西应该还有各种bug的,欢迎指出 😀

最后,上代码: Tornado Web Photo Gallery

玩玩Tornado,写了一个网络相册分享照片》有32个想法

  1. ET

    小虾,我想请教一下,像缩略图http://gallery.xiaoxia.org/preview/small/upfiles/2011/02/12-150×150.jpg?v=1298578197后面的跟的v=xxxxxx主要用途是什么?
    请赐教,O(∩_∩)O谢谢~~

    回复
    1. Xiaoxia 文章作者

      哈,v是代表图片的版本号,通过图片内容算出来的。
      因为图片数量很多,虽然现在浏览器都有缓存,但是默认都会发送请求来询问服务器文件是否改变,然后服务器发送304说Not Modified,其实很麻烦。
      现在服务器的回应头设置了图片缓存一年,也就是说这个缩略图会在浏览器缓存起来,你浏览下一个页面的时候,浏览器只不会再发送这个图片的获取请求,除非url发生改变,例如这个v的值发生改变,否则缓存是不会变更的。
      所以这样做能够加快网页加载速度,也减轻服务器的负担。

      回复
    2. Xiaoxia 文章作者

      为了验证一下,你可以在调试器里看看,浏览一个刚才浏览过的页面,就会发现只请求一个网页连接,一瞬间全部图片都出来了。

      回复
      1. lxfy

        开源的放在github上,不愿意开源的可以放bitbucket。
        保证代码的安全,而且版本管理很有用,将来找实习或者找工作时,一个github账号胜过一份长长的简历。

        回复
  2. momaer

    请教一下,我使用python2.6 ./server.py遇到中文的目录不会出问题。但如果是nohup python2.6 ./server.py >./log.txt 2>&1 &这样,访问中文目录,就会出现:
    ERROR:root:Uncaught exception GET /gallery/%E5%AE%9D%E5%AE%9D (220.178.24.166)
    HTTPRequest(protocol=’http’, host=’actself.me:8888′, method=’GET’, uri=’/gallery/%E5%AE%9D%E5%AE%9D’, version=’HTTP/1.1′, remote_ip=’220.178.24.166′, body=”, headers={‘Connection’: ‘keep-alive’, ‘Accept-Language’: ‘zh-CN,zh;q=0.8,en-US;q=0.6,en;q=0.4’, ‘Accept-Encoding’: ‘gzip,deflate,sdch’, ‘Referer’: ‘http://actself.me:8888/gallery/’, ‘Host’: ‘actself.me:8888’, ‘Accept’: ‘text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8’, ‘User-Agent’: ‘Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.114 Safari/537.36’})
    Traceback (most recent call last):
    File “/usr/lib/python2.6/site-packages/tornado/web.py”, line 987, in _execute
    getattr(self, self.request.method.lower())(*args, **kwargs)
    File “/var/www/photos.actself.me/handler/gallery.py”, line 31, in get
    print “get”, path, ‘from’, self.request.remote_ip
    UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 0-1: ordinal not in range(128)
    ERROR:root:500 GET /gallery/%E5%AE%9D%E5%AE%9D (220.178.24.166) 1.71ms

    请问小虾这是喂神马?

    回复
  3. armsword

    最近两天,我也在学习tornado,恰好看到了你的这篇文章,看了下代码,发现当图片为中文时候,图片显示不出来,原因是你在处理get()时候,中文名字没有encode。稍微修改下应该就可以了。当然这篇文章已经好久了。我看评论里没人指出。

    顺便说,我不会CSS,我把你的CSS拿来用了哈。

    回复
    1. Xiaoxia 文章作者

      好久之前的习作了,现在我更喜欢用flask框架,因为扩展性更好,所以直接用 flask-bootstrap来写。

      回复

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据