说起我的小博客的历史啊真的很久了。最早之前是在10年暑假,那时候自己学习ACM,在POJ上面做题目。每天都做几道,当时想着把好不容易把这些题目写出来,到时过不了多久在看到的时候就忘了,这样多浪费啊,于是我开始谋划我的博客,当时wordpress很火,我也就开始了我的博客生涯,买了个90元的博客主机,买了个域名,开始了我的做题笔记。
后来在12年的时候,那时学习python,准备往web方向走,虽然django的文档还是很多,但是必定需要一个实际项目入手,我决定将我的博客重写,于是用django实现了一个版本,写出第一版后就没怎么改过了,现在在去看我当时写的代码,真的是很不规范,很多代码现在我都看不下去,不过必定是我的一个作品,呵呵。具体项目在JoveSky,虽然这是我的地一个django项目,但是相对来说很多功能都实现了,当初选择markdown作为书写格式,也为这次迁移减少了很多麻烦。
当初python的那个版本,一直挂在我朋友的SAE上,也就一直没要钱,但是不知道怎么回事,速度很不稳定,后来想想,其实我的博客,真的也只有文字,那么还是专注于写作吧,于是我选择了使用静态博客。既然是静态博客,当然要找一个python写的了,(不行就自己写个,^_^)
搜索了半天,找到了python的wiki,https://wiki.python.org/moin/StaticSiteGenerator
简单看了下有一些不错的,其中我比较有名的是Pelican,但是他的模板渲染用的是jinja2,这个我不是很熟,最近跟转到后台那边去了,也正好在用mako,所以想找个mako模板的后面我该起自己的主题也方便一些,最后找了半天选择了Nikola,选择他书要有3个原因
- 调试方便,自带开发服务器,还可以通过插件实现实时检测文件变化。
- 方便部署到github page,他提供了一个自动化部署的命令,我看了下源码,就是帮你执行了一些命令,向我这样的自然要偷懒。
- 模板嵌套不错,我看了下他的默认模板,写的非常不错,我没看过别的,也不知道应该是什么水平,不过看着顺眼就好。
迁移过程
迁移文章
我之前django博客中,是用markdown来书写,所有文章都在数据库内,现在要都迁移出md文件,首先我去SAE中的数据库导出,其实可以到处成XML或这YAML但是我没这么麻烦,直接到处成SQL,然后导入了我本地的mysql,自己书写了个脚本来完成将文章变成文件的工作。简单晒下我的脚本吧。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
|
import MySQLdb import os
conn = MySQLdb.connect(host='127.0.0.1',user='qf',passwd='123456',charset='utf8' ) cur = conn.cursor()
conn.select_db('qf_core')
count = cur.execute('select title,slug,create_time,markdown from blog_post')
result=cur.fetchall()
template = """<!-- .. title: %s .. id: %s .. slug: %s .. date: %s+08:00 .. tags: .. link: .. description: .. type: text -->
"""
for r in result: title = r[0] slug = r[1] time = r[2] markdown = r[3] f = open('%s.md'%title,'wb')
f.write(unicode.encode(template%(title,slug,time.strftime('%Y-%m-%dT%H:%M:%S')),'utf-8')) f.write(unicode.encode(markdown,'utf-8'))
|
这样我们就看到了一文件夹的文章,python做这种小工具真心简单。
集成多说评论
之前我所有的系统都是使用多说评论,无论是我的wordpress还是django,多说做的是真不错,但是这个框架必定是老外写的,其中集成了disqus,我参考disqus的实现将多说集成进去,找到源码中的comments_helper_disqus.tmpl,参考他我完成了comments_helper_duoshuo.tmpl源码如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| ## -*- coding: utf-8 -*- <%def name="comment_form(url, title, identifier)"> %if comment_system_id: <!-- 多说评论框 start --> <div class="ds-thread" data-thread-key="${identifier}" data-title="${title}" data-url="${url}"></div> <!-- 多说评论框 end --> <!-- 多说公共JS代码 start (一个网页只需插入一次) --> <script type="text/javascript"> var duoshuoQuery = {short_name:"${comment_system_id}"}; (function() { var ds = document.createElement('script'); ds.type = 'text/javascript';ds.async = true; ds.src = (document.location.protocol == 'https:' ? 'https:' : 'http:') + '//static.duoshuo.com/embed.js'; ds.charset = 'UTF-8'; (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(ds); })(); </script> <!-- 多说公共JS代码 end --> %endif </%def>
<%def name="comment_link(link, identifier)"> %if comment_system_id: <a href="${link}#ds-thread">Comments</a> %endif </%def>
<%def name="comment_link_script()"> %if comment_system_id: %endif </%def>
|
部署
其实这个最好的部署环境是github page,但是大天朝你懂得,好在国内有很多良心企业,比如托总的gitcafe,稍微修改了下,我就将整个博客部署到上去
写在最后
博客是我技术的一个载体,真的记载了我从开始接触真正的技术到后来的练习的过程,我博客的变迁,也是我成熟的过程,我相信我的小博客不会就这么接触,也许还会有下一次迁移,倒是折腾吧!