自从在大学开始接触网站,建站就成了我的爱好之一,在网上见到各式各样优秀的网站,就一直想做一个自己的站点,但由于我并非计算机相关的专业,没有资金也没有技术,所以只能使用现成的网站程序,甚至是主题也只能套用现成的,自由性约束很大,总是不能令自己满意,毕竟并非为自己量身定做的网站程序和主题,总是有些地方不适合自己。

后来,我一边自学计算机相关知识,一边在现成的主题上面进行二次开发,结果发现因为主题太大太杂,很多地方的修改都有所关联,越改越乱,以致痛苦不堪。也因此挖下了许许多多的坑。

因为内心的焦虑急躁,又过于追求完美,总是“欲求不满”,所以网站换来换去,甚至于域名也换来换去,早已丢失了原本生产内容,记录内容的初心。

虽然总是对自己说“回归初心”,“回归本质”,但却总是因为一些问题而出现动摇,费神费时费钱,为此我也懊恼不已但又控制不了自己。

我不禁感慨,互联网虽然拥有源源不断的新鲜信息,却也同时充满了诱惑,在各种各样的海量信息冲刷之下,人心浮躁,大数据的出现并未让一般人获益,反而是先损害普通人的利益,更令人焦虑不安。曾几何时也想过远离互联网一段时间,过回从前没有网络、没有电脑游戏的时光,虽然往事不堪回首,但却也比如今稍微轻松一些。

Flask 从入门到放弃

在 RewrZ 之前,我尝试使用 Flask 进行开发,因为这是我在前期调查中,绝大多数国内网友都推荐的轻量级框架,皆说简单快速,易学,性能好,爽得飞起来之流,还说最适合个人小团队,特别是某站的人更是对其推崇备至,我误以为该站点的人可信度跟内容价值都比较高,于是入坑。

耗费了我两个月的时间,终于完成了绝大部分的博客功能,从注册登陆,密码重置,博客发帖,分类,标签,评论,甚至成功在树莓派上面部署 nginx + uwsgi + virtualenv 环境正常运行了起来。

但这已经耗费了我太多太多的热情与时间,剩下还有许许多多的细节需要处理,那些恶心的代码逻辑,要是我后面想要增加什么功能,估计全部要再改一遍,当时我头都大了,这要再花多少时间,才能使其看起来像模像样啊!这花了两个月时间才做成的半残次品,还要投入多少的时间精力才能用在生产环境啊!我还要等多长时间才能老老实实地写博客呢?

Flask确实是简单快速,几行代码就能够运行起一个“网站”,但这个“网站”要真的可以实际使用,能够像个模样才行啊!

Django 从入门到重写

偶然一次浏览网页,我看到了“追梦人物”博客上面的 Django 入门教程,粗略看了一遍之后惊奇地发现比 Flask 简单多啦!没有那么多的坑和轮子要自己踩、自己造,于是决定跟着这个入门教程自学 Django ,用 Django 重写自己的博客项目,我不再理会什么性能,什么轻量级之类好听的词语(然而, Django 默认设置的性能实在比 Flask 差多了),对照着教程,几天内就做出了一个像模像样的博客了,不知道的人可能还会以为这是 WordPress 驱动的呢。我这个 Django 入门项目,就是 RewrZ 。

与入门教程不同的是,我去掉了教程中的 Markdown 功能,因为我不需要这个功能,可能后续会添加该功能,但是仅仅是为了开放给评论使用,我自己则采用了 django-ckediter 编辑器,这个对于我来说使用更加方便。

在原入门基础上面,我也有所舍弃、改进,以适应自己的需求,例如我为文章、标签、分类添加了别名,可以使用别名作为固定链接,使之链接更加美观。固定链接由一个全局开关掌控,并且更换固定链接之后,之前的链接一样可以完美访问,它会自动进行301跳转,完美解决了更换了固定链接后影响全站链接的问题,这也是 WordPress 所不具有的功能。

在评论上面,我增加了父字段让多级评论成为可能,实现嵌套评论功能,但由于Django默认模板的功能限制,无法像 Jinja2 那样进行递归,所以暂时只能一级显示。但这并不是什么大的问题,因为嵌套评论我个人认为最多只需要有两级就够了,太多反而不美。这也是我又装载了 Jinja2 引擎的原因,考虑将模板引擎改为 Jinja2 ,但发现又会很多标签用不了,前端模板要进行改写放到 Jinja2 的文件夹下面,所以暂时不考虑处理了。后来我又发现了 Django 有个评论扩展,可以实现嵌套评论并显示在自带的模板引擎上面,但这些目前来说都不重要了,后面再做考虑。

个人开源博客系统项目——RewrZ Project

这是个人利用业余时间,尽力抽空捣鼓出来的项目,基于 Python + Django 开发的,开源个人博客网站系统。

DEMO: https://rewrz.com/

  • RewrZ ,名字灵感是来自《 Rewrite 》(改写)及其 OP 「 Philosophyz 」(最终的哲学)。
  • RewrZ ,即最终的改写( Rewritez ),最后重写的意思, Python 本身也是一种哲学语言。(虽然如今都被炒得烂大街了,一点都不 Pythonic 。)
  • RewrZ ,除去这些字面的意思,同时也用以告诫自己:人的精力总是有限的,特别是只有一个人的时候。
  • RewrZ Project ,可能是我这个曾经的IT爱好者、中二的二次元迷、最后的一个开源项目。

偶然有点什么新想法,我就忍不住新建项目。游戏、网站、小说等等,皆是如此,最终都在萌芽或者发展之中就宣告放弃,导致一个完整的都没能做出来。

所以我要告诉我自己,这是我最后的个人网站项目,已经没有能力再挖坑去做什么 WordPress 主题,去折腾 Flask 等等只是纯粹浪费时间精力的事情,以后只维护这个项目就算了。

RewrZ 项目背景

我很感谢这些年 WordPress 和 Blogger 的陪伴,曾经连续写了好几年的博客,用的就是这两个博客系统。当然,也用过 Tumblr 作为微博替代品。

如今互联网上的网站系统多如牛毛,成熟且有名气的数不胜数,特别是有 WordPress 这样的已经发展多年的超级成熟的博客程序,是否就没有必要再去挖坑自己去做一个呢?

我觉得不是的。

在我使用中,我遇到很多不满意的地方,不断地去寻找改善的方式。

  • 一些我想要的功能没有,需要自己自定义加上去或者装插件,有时候装插件又可能会带来新的问题。
  • 有些我不想要的功能又要想办法去关闭,甚至有时候根本关闭不了。
  • 太多的插件以及网友的提供的推荐设置,也是容易让人产生困难选择症。
  • 频繁对大多数用户而言无感知的无用升级,调用函数的改动等等,一些长时间不更新的主题和插件可能就无法使用了。
  • 功能的强大带来的臃肿、性能的瓶颈,以及搭建需要的各种各样的依赖,主机配置要求越来越高。
  • 以及一些国内虽然无法三言两语能说清楚,但奇怪的是大家都懂的问题。

于是我就想,反正用现成的博客系统还是要折腾来折腾去,都是要捣鼓折腾,倒不如干脆自己开发一个吧!按照自己的想法去设计就好啦!而且还不用去学习那些特定的东西,自己开发的话就有印象啦,改动都比较好改。

于是,这个项目就诞生了。

(虽然后来事实证明,开发一个网站系统并不是一件简单的事,比折腾现成的成熟系统更累更麻烦,而且也同样未必就好用,这都是后话了。)

RewrZ 基本功能清单

  • 文章发布
  • 文章评论
  • 文章分类
  • 文章标签
  • 文章搜索
  • 博客 RSS 订阅
  • 文章按月归档
  • 后台管理

RewrZ 持续性工作

  • 持续的前端优化(调整合并 js/css 、减少体积等)
  • 持续的前端美化(持续修改调整外观)
  • 持续的问题发现与修复

RewrZ 附加功能想法与后续可能性计划

  • 二级评论功能
  • 评论验证码
  • 自动生成文章导航(引用 autocjs )
  • 添加年月归档页面
  • 评论开放 HTML/MD 探讨
  • 增加网站可视化设置功能
  • 增加推文功能
  • 增加相册功能
  • 增加新增页面功能
  • 增加自定义菜单功能
  • 增加个人主页功能
  • 更加地中二化
  • Ajax 评论与回复
  • 使用 Akismet 自动过滤垃圾评论
  • 多域名访问
  • 探索自动化部署与更新的实现

RewrZ 版本与预览

  • 1.0 版本

后端框架 Django 1.x ,前端主题使用基于 now-ui-kit 的 MIT 开源版本进行二次修改

  • 2.0 beta 版本

后端框架 Django 2.x ,前端主题采用开源前端框架 Materialize 进行重新制作。

算是一个比较大的版本升级更新,后端本来想直接用 Django 3.x ,结果发现不能无缝升级切换,有点小坑,暂时不搞。前端则更换框架,完全改头换面了。

主页

博客页

文章页1

文章页2

RewrZ 的设计思想

我虽然喜欢简洁,但并不喜欢“极简”,极端在大多数时候都不会让人喜欢的。

RewrZ 的设计原则是——简洁中庸,拥有少量的功能,同时也存在无限的可能。只要你懂 Django ,就有无限的可能进行自由地扩充功能。

RewrZ 并不提倡或者说鼓励收集访客的任何信息,这在评论模块上面没有记录访客的 IP 地址,浏览器 UA 可以体现出来,仅保留访客主动提供的用于联系和头像展示使用的邮箱地址,而且是不公开的。

三个社交图标的选择和排序,仅仅是为了集齐“ What The Fuck? ”( WTF ),用来玩梗的,别无他意。

另外之所以有七个互联网各类社交应用的图标排成一排,而且还有七种颜色,也仅仅是为了向《七龙珠》、《七色彩虹天使》……等童年时代的二次元 ACG 致敬。

Logo 是自己用 PS 做出来的,“ RewrZ ”的“ R ”和“ Z ”叠在一起,一黑一白,一阴一阳,有点像太极、阴阳、周易的中国古代哲学的意思,当然也可以理解为一男一女,有点点浪漫、情侣恋爱的意味。

RewrZ 的注意事项

固定链接、网站标题、描述、后台尝试登陆次数限制等设置,均可以在 setting.py 文件自行修改,很多地方都加了中文注释,应该不会有不明白的地方存在。

二步验证功能建议登录后台设置好用于验证的设备之后再启用,否则一旦启用,你就登录不了后台了。

改完这些之后就可以将其上传到你的服务器上面进行部署了。

部署方法可参照此篇文章:https://rewrz.com/archive/nginx-uwsgi-virtualenv-flask-django-rewrz/

RewrZ 的开源协议

RewrZ 使用的是 AGPL 开源协议,这主要是因为 RewrZ 使用的后台扩展使用了 AGPL 协议。

也就是说,只要是基于 RewrZ 开发的网站,无论是否有所修改,都必须有公开声明,并且附上源代码,注意这并不包括非程序一部分的各类文件数据。不必将自己的个人文件或者数据库都开源了,当然如果你喜欢,你也可以这么做。

历史纪录

2017-10-10

正式注册 rewrz.com 域名,这个其实我已经计划了半年了,一直在考虑是不是等旧域名过期之后再注册,趁着今天萌节注册 .moe 域名,实在忍不住也一同先注册下来了,有时间再部署上线。

2017-10-15

RewrZ 1.0 部署上线,并将公开的源代码托管到 GitHub 。

2020-04-30

RewrZ 2.0 Beta 测试版本完成。

2020-05-01

RewrZ 2.0 Beta 部署上线,并将公开的源代码托管到 GitHub 。

2020-05-02

RewrZ 2.0 Beta 解决一些部署出现的坑,以及更新说明。