QuQuBlog相册中的图片列表,之前是把图片定高,容器定宽来排的。这样实现起来简单粗暴,但在图片大小不一,尤其是横竖图片混排时,竖着的图片两侧很空,不好看,还占地方。
最近,用了一种新策略来改进图片排列,效果大约是这样:
在各种分辨率下都是这样的效果:
点顶部导航中的“相册”或者点这里可以看到实际效果,想知道具体策略继续往下看。
上次总结了Django博客系统的开发,这次接着总结程序部署的相关内容。这几天我折腾了个够,尝试各种组合来搭环境,从一开始的Apache + mod_wsgi,之后的Nginx + uWSGI,再后来的Lighttpd + FastCGI,最后采用的是Lighttpd + Apache + FastCGI。
最后还是加上了Apache,是因为我发现Lighttpd自带的mod_compress貌似只对静态文件有用,我的博客动态输出的页面怎么都不会被gzip。
QuQuBlog是我基于Django开发的个人博客系统。目前已经具备最基本的博客功能,还在不断完善中。考虑在合适的时候开放源代码。
进化一览表:
2012, 02.18,为文章增加了slug字段,用于生成文章页面url,新文章必须填写;
2012, 02.15,相册生成图片缩略图时,自动根据exif信息旋转图片;
2012, 01.14,增加了一些二级页。如类别归档、月份归档、友情链接;
2011, 07.11,相册图片排列方式改进;
2011, 07.08,博客/相册前台JS库换成QWrap;
2011, 07.07,新评论邮件通知机制;
2011, 07.03,相册前台增加Exif信息展示;
2011, 04.09,相册前后台升级;
2011, 03.25,管理后台增加顶部通栏,方便操作;
2011, 03.20,增加相册功能,将图片系统抽取成为独立app;
2011, 03.19,批量上传图片,自动生成不同规格的缩略图;
2011, 03.18,增加sitemap页面,旧站点迁移完成;
2011, 03.17,实现pingback client,增加了RSS边栏小工具;
2011, 03.15,在服务器上搭建了git环境用来管理代码;
2011, 03.14,实现pingback server功能;
2011, 03.13,增加评论Gravatar头像展示、Akismet过滤功能;
2011, 03.12,初始版本上线;
2011, 03.08,项目启动;
从最开始的ROR,到后来的CI、CakePHP、ThinkPHP等各式各样的MVC框架用了不少,还是觉得用来开发QuQuBlog的Django框架最吸引人,玩着玩着就上瘾了。
记录下开发过程中的一些点滴:
Python是之前装的2.6.5,Django用SVN里的1.3RC,IDE用eclipse+Pydev,数据库一开始用sqlite,后来改用到mysql。
开发过程中用Django自带的runserver来启动web服务,用django-debug-toolbar来分析和优化SQL查询语句。服务器上跑的是Apache2+mod_wsgi,之后可能会换成lighttpd+fastcgi。
博客用户系统用的框架自带的django.contrib.auth,Tag系统用的django-tagging,评论系统用的自带的django.contrib.comments。
后台发布博客用的TinyMCE这个优秀的web编辑器,参考了这篇文章给编辑器加上了插入<pre>代码标签功能,前台用SyntaxHighlighter在浏览器端高亮代码,使用AutoLoader动态引入代码高亮文件。
另外还使用django.core.paginator,结合django模板的自定义标签扩展了一个通用的分页组件。
通过django.contrib.syndication.views和django.utils.feedgenerator对博客输出rss和atom订阅,下面是全部代码:
# -*- coding:utf8 -*-
'''
Created on 2011-3-8
@author: Jerry
'''
from django.contrib.syndication.views import Feed
from django.utils.feedgenerator import Atom1Feed
from django.contrib.sites.models import get_current_site
from blogs.models import Post
class PostRssFeed(Feed):
title = u'Jerry Qu \'s 小站'
link = 'http://' + get_current_site(None).domain
description = u'Welcome to Jerry Qu \'s 小站'
author = 'Jerry Qu'
def items(self):
return Post.objects.get_post().order_by('-pub_date')[:10]
def item_title(self, item):
return item.title
def item_pubdate(self, item):
return item.pub_date
def item_description(self, item):
return item.content
class PostAtomFeed(PostRssFeed):
feed_type = Atom1Feed
subtitle = PostRssFeed.description 展示评论时,参考了Gravatar官方文档获取用户头像,跟之前用的wordpress展示上是一样的。
从上面可以看出Django的开发效率是有多么高,基本你能想到的功能都能找到完整的解决方案。但只是使用现成库不见得是一件好事,好在python大部分库都是有源码的,可以通过阅读源码来了解别人的思路,学习别人代码上的优点。
接下来,我还会继续开发这个博客系统,Django和Python好玩的东西还有好多,近期会自己实现以下功能:
本文链接:http://www.imququ.com/post/63.html
--EOF--
没错,你看到的“Jerry Qu的小站”确实是我的全新个人博客!有两方面的全新:
首先是程序上的:
其次会体现在内容上:
这次更换博客的想法完全是一时兴起,但执行得超有效率:
更新:下午新博客系统上线后,就开始了数据迁移的工作。到目前为止,旧的博客、图片和一些碎文件都已经迁移完毕,Tag也一并迁移了。评论没有弄,之后可能会升级为Threaded Comment,还要改数据结构,就先不折腾历史数据了@03-13
本文链接:http://www.imququ.com/post/1.html
--EOF--