随着 http://milu.blog 发布beta 版本过去半年的时间,准备发1.0
正式版本了,在原来beta版本的基础上还是新增了一个小的模块特约撰稿人
,其它功能保持了极大的克制和稳定。
先从全局角度总结一下: 虽然前期发的是beta版本,但深感版本规划给管理业余项目带来的众多好处。在“需求阶段做加法,开发阶段做减法”的原则下很好的梳理基础需求,而真正开发的时候,由于投入时间有限,在极少的时间集中精力做无限的事情本身是一项很大的挑战,所以需求分期,拆分任务变得尤为重要,要不然上线遥遥无期。
那提前预告一下,随着1.0
的准时发布,那2.0
的版本开发也正式启程,敬请期待。
早上线的好处就不提了,早一步收到用户的反馈,不断的鞭策着用户体验向更好的方向发展,这次比较意外还是收到同学的pr。前期没有任何的沟通,小伙伴凭借着自己的激情和对这个项目的理解,到目前为止发起了两次比较重要的pr,那种突破了时间空间的限制下,被人认可有人主动参与的感觉真的是特别开心。
具体来说是对beta版本的一次优化升级以及bug
修复,没有增加新的功能开发,完全诠释了:先上线在优化的这一偷懒专业技巧。
具体的变更如下:
1. 前台
首页
文章增加了用户头像的显示
留言板
增加了分页选项,是的没错,beta版本没有分页。
特约撰稿人
是一个新增的模块,读取后台的用户列表,点击用户跳转到用户相关文章列表。
分类、归档、友链
这些增加了Icon CSS3动画交互,显得更为细腻。
2. 后台
关于我
增加了修改接口,beta版本中页面上写死的,现在存为数据库中。
系统设置
系统设置进一步优化,增加了评论,Banner图片,主题风格等等的切换开关。
添加图片上传到阿里云oss
头像使用cravatar
配置文件改为toml文件,避免无法都配置信息报错的问题
以上感谢 @akira 的pr,虽然merge过程中需要花费一定的时间,最终还是完整合并了。pr当中同时也增加了支持
docker
的部署方式。Markdown
Markdown编辑器由比较粗糙的换成了bytemd
3. 问题
1. 日期带T带D的问题
fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8mb4&parseTime=True&loc=Local"
- 如果配置了parseTime=true,MySQL中的DATE、DATETIME等时间类型字段将自动转换为golang中的time.Time类型。 类似的0000-00-00 00:00:00 ,会被转为time.Time的零值。
- loc 默认值 UTC,表示解析为UTC时间,一般设置为Local,表示使用当地时间。 原本这两个是这个意思,但是加上之后时间读取之后出现T,D 删掉即可。
2. 拆分User
model
主要解决登录时需要password字段进行值的比对,但日常用户信息的获取又不需要password这个字段。这时候就需要拆分
type BaseUser struct {
BaseModel
Nickname string `gorm:"column:nickname;type:varchar(100)" json:"nickname"`
Email string `gorm:"column:email;type:varchar(50)" json:"email"`
Address string `gorm:"column:address;type:varchar(255)" json:"address"`
}
type User struct {
BaseUser
Username string `gorm:"column:username;type:varchar(20);not null " json:"username"`
Password string `gorm:"column:password;type:varchar(500)" json:"password"`
}
// ReqUser 过滤Password的结构体
type ReqUser struct {
BaseUser
Username string `gorm:"column:username;type:varchar(20);not null " json:"username"`
}
在修改和新增时的密码加密分别在 gorm的hooks钩子 BeforeCreate, BeforeUpdate
中进行, 对应文件 elk-blog\app\model\user.go
,也可以对单一字段在返回时进行加密,比如:
func (d *Message) AfterFind(tx *gorm.DB) (err error) {
d.Email = utils.Md5(d.Email)
return
}
3.大文本数据类型
类型 | 长度范围 | 占用空间 |
---|---|---|
TINYTEXT | 256 bytes | |
TEXT | 65,535 bytes | ~64kb |
MEDIUMTEXT | 16,777,215 bytes | ~16MB |
LONGTEXT | 4,294,967,295 bytes | ~4GB |
低估了一篇文章的长度 TEXT 还是不够,已升级为 MEDIUMTEXT 类型。 |
4. 链接
最后附上仓库地址,欢迎收藏关注star