麋鹿博客-milu.blog-发布1.0版本

杰克
0 评论
/ /
2468 阅读
/
3861 字
24 2023-03

随着 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. 拆分Usermodel

主要解决登录时需要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

    暂无数据