书影博客搭建历程

2014/2/4

在Github上找到Zinnia项目,完成本地调试

2014/2/5

Zinnia v0.13成功部署至SAE,使用默认编辑器转载了数篇日志,但默认编辑器易用性不太理想 %>_<%

2014/2/6

1. 修改了书影博客的编辑器,从默认编辑器变更为django-tinymce

2. 修改了书影博客的主题,从默认主题变更为zinnia-theme-bootstrap

2014/2/8

1. 更新了tinymce的版本(从3.0到4.0),集成了codemirror代码高亮插件

2. 使用highlight.js做代码高亮显示

2014/2/9

添加了fancybox插件

2014/2/25

使用zinnia-threaded-comments为comment添加reply功能,并修改了template使之适应bootstrap的风格

2014/3/26

首次备案申请被驳回

2014/4/11

二次备案申请通过

2014/6/4

集成了多说评论框

2015/09/03

将Zinnia版本更新为0.15.2,Django版本更新为1.8.4

使用Zinnia 0.13在SAE上搭建博客

Zinnia项目简介:

django-blog-zinnia

Zinnia是一款基于Django的开源博客引擎,它简单实用、功能强大且易于扩展。

Zinnia包含了主流博客引擎的大部分特性,开发者可以方便地在Django Web框架下搭建起属于自己的博客。

Zinnia目前的最新版本是0.14,创建者为Fantomas42。

Github的项目地址请戳:https://github.com/Fantomas42/django-blog-zinnia/

截止到2014年2月6日,该项目是Github上最热门的Django Weblog引擎。

然而,由于Zinnia 0.14依赖的Django最低版本为1.6,而SAE目前支持的Django最高版本为1.5,所以还无法在SAE上使用。

限于SAE的Python环境,目前只能使用Zinnia 0.13版本(该版本依赖的Django最低版本为1.5)


在SAE上搭建Zinnia博客的过程:

(假设已经建好了一个django web工程)

注:Zinnia依赖于django-admin模块,首先需要启用django-admin,

具体操作方法见:http://www.ibm.com/developerworks/cn/opensource/os-django-admin/

1. 下载Zinnia v0.13 https://pypi.python.org/pypi/django-blog-zinnia/0.13,解压后将zinnia目录拷贝至工程目录下

2. 下载Zinnia v0.13的依赖包:BeautifulSoup4,django-mptt以及django-tagging,

将相关依赖包源文件解压后,拷贝mptt,tagging,bs4至工程目录下

依赖项目 URL 版本范围
Python SAE默认提供 >= 2.6.5
Django SAE默认提供 == 1.5
PIL ...

继续阅读

基于Channel的Django日志查看工具

DjangoLogboard4Sae

DjangoLogboard4SAE是一个运行在SAE(Sina Application Engine)的实时日志查看工具

该工具使用了Channe服务,可将Django应用的请求与异常日志实时地展现给开发者,便于线上调试

Github:https://github.com/qinjiannet/logboard

演示地址:http://logboard.sinaapp.com

使用方法:

1. 在settings.py文件中MIDDLEWARE_CLASSES列表添加logboard.middleware.DebugMiddleware中间件

2. 启用SAE的task_queue模块,创建一个等级为2的顺序队列,命名为msg_queue

3. 初始化kvdb

4. 修改urls.py,添加路由:

  1. url(r'^logboard/', include('logboard.urls')),
  2. url(r'^_sae/channel/', include('logboard.urls')),

注:*通过访问http://logboard.sinaapp.com/logboard/test/可以触发一个异常

基于MySQLdb的SAE_PYTHON环境MYSQL小工具


Python代码 


  1. #coding=utf-8

  2. import sae.const

  3. import MySQLdb

  4.  

  5. #获取数据库连接

  6. def get_conn():

  7.   conn=MySQLdb.connect(host=sae.const.MYSQL_HOST,user=sae.const.MYSQL_USER,passwd=sae.const.MYSQL_PASS,db=sae.const.MYSQL_DB,port=int(sae.const.MYSQL_PORT),charset='utf8')

  8.   return conn

  9.  

  10. #执行SQL查询,结果以list(dict...)的形式返回

  11. def query_for_list(query,*param):

  12.   try:

  13.     conn=get_conn()

  14.     try:

  15.       cur=conn.cursor(cursorclass=MySQLdb.cursors.DictCursor)

  16.       cur.execute(query, param)

  17.       result = cur.fetchall()

  18.       return result

  19.     finally:

  20.       cur.close()

  21.       conn.close()

  22.    ...

继续阅读