欢迎光临建站系统网站

7个golang的开源cms后台生成工具体验总结

作者:jcmp      发布时间:2021-01-27      浏览量:0
这两天在网上研究了很多开源的自动cm

这两天在网上研究了很多开源的自动cms生成工具,这里对这两天的收获做一下总结。本质上,自己做一个简单的也不费事儿,但是闭门造车容易,拥抱世界却很难。所以先看看有什么巨人的肩膀可以用是好的。
在低代码和零代码领域的应用,一般有四种类型:

这两天调研的功能主要属于第三种类型。下面我就每一种都简单介绍一下

1.go-admin,4.4k☆

下载并运行: https://github.com/GoAdminGroup/go-admin
也有一个demo: https://github.com/GoAdminGroup/example.git
打开体验地址: http://localhost:9033/admin
文档地址: http://doc.go-admin.cn/zh/

评价

可以说,这个项目做得挺认真的,特别是当我们发现这是一个中山大学的大三学生的项目时,感觉更为不容易。为小兄弟点赞。

2.goweb,385☆

地址: https://github.com/iissy/goweb
如果遇到端口冲突,无法启动,则把

iris.Addr(":80"),

改为:

iris.Addr(":8083"),

打开体验地址: http://127.0.0.1:8083/

评价

3.qor,4.6k★

地址: https://github.com/qor/qor-example
文档地址; https://getqor.com/cn
https://doc.getqor.com/
这个项目看起来比较专业,但是无法运行起来。
报错信息:

Failed to find configuration config/smtp.yml, using example file config/smtp.example.ymlWARNING: AssetFS is used before overwrite it!

看起来依赖的AssetFS和smtp没有搞定。

评价

4.CCMS,19☆

地址: https://gitee.com/omyscode/CCMS.git
http://127.0.0.1:8081/ccms 普通用户;账号密码:453453453453/453453453453
http://127.0.0.1:8081/ccms/c_login 管理员;admin/admin;

评价

5.pinecms,35☆

地址: https://github.com/xiusin/pinecms.git
这个网站报错解决不了。无法编译通过。

# github.com/shirou/gopsutil/disk../../go-miniapp/pkg/mod/github.com/shirou/gopsutil@v3.20.11+incompatible/disk/disk_darwin.go:64:52: cannot use stat.Mntfromname[:] (type []int8) as type []byte in argument to common.ByteToString../../go-miniapp/pkg/mod/github.com/shirou/gopsutil@v3.20.11+incompatible/disk/disk_darwin.go:65:50: cannot use stat.Mntonname[:] (type []int8) as type []byte in argument to common.ByteToString../../go-miniapp/pkg/mod/github.com/shirou/gopsutil@v3.20.11+incompatible/disk/disk_darwin.go:66:51: cannot use stat.Fstypename[:] (type []int8) as type []byte in argument to common.ByteToString../../go-miniapp/pkg/mod/github.com/shirou/gopsutil@v3.20.11+incompatible/disk/disk_darwin.go:77:44: cannot use stat.Fstypename[:] (type []int8) as type []byte in argument to common.ByteToString

评价

6. go-blog,154☆

代码地址: https://github.com/1920853199/go-blog.git
体验地址: http://127.0.0.1:8088/

评价

7.GoAdmin,118☆

代码地址:
https://github.com/CrazyRocks/autocreate.git 90☆
https://gitee.com/crazyrocks/goadmin.git 118☆
体验地址:
http://127.0.0.1:8081/ 在这里生成代码;GF代码生成器;
http://localhost:8192/ 在这里体验网站;goadmin后台;
注意啊,作者没有很详尽的readme,我看了源代码很久才折腾好了。

第一步:建表


注意:

这一步,需要在goadmin的数据库中建表。例如:
先修改配置文件,支持链接数据库:

// 在config/config.toml 文件中,修改数据库配置,指定数据库名字;host     = "localhost"port     = "3306"user     = "root"pass     = "123456"name     = "goadmin"type     = "mysql"role     = "master"charset  = "utf8"priority = "1"debug  = true

然后自己在终端下面访问数据库,创建表,这里我一次性创建两个:

// 然后创建表:create table `site_weixin` (`id` int(11) auto_increment comment 'ID',`name` varchar(45)   default null comment '名称',`short_id` varchar(45) default null comment '微信号',`qrcode` varchar(255) default null comment '二维码',`create_time` varchar(255) default null comment '创建时间',`update_time` varchar(255) default null comment '更新时间',`status` varchar(255) default null comment '状态',primary key (`id`)) engine=InnoDB AUTO_INCREMENT=1 charset=utf8mb4 comment='绑定微信';create table `site_wxuser` (`id` int(11) auto_increment comment 'ID',`name` varchar(45)   default null comment '名称',`short_id` varchar(45) default null comment '微信号',`qrcode` varchar(255) default null comment '二维码',`create_time` varchar(255) default null comment '创建时间',`update_time` varchar(255) default null comment '更新时间',`status` varchar(255) default null comment '状态',primary key (`id`)) engine=InnoDB AUTO_INCREMENT=1 charset=utf8mb4 comment='微信用户';

第二步:点击生成

表建好之后,运行GF代码生成器。
https://github.com/CrazyRocks/autocreate.git 里面运行:

go run .

命令行提示,端口启动在8081,则访问: http://localhost:8081/#generator.html 即可访问GF代码生成器。


result├── html│   └── site│       ├── weixin.html│       └── wxuser.html├── js│   └── site│       ├── weixin.js│       └── wxuser.js├── site│   ├── config│   │   └── router.go│   ├── controller│   │   ├── site_weixin_controller.go│   │   └── site_wxuser_controller.go│   ├── model│   │   ├── site_weixin_model.go│   │   └── site_wxuser_model.go│   └── module.go├── sql│   ├── site_weixin_menu.sql│   └── site_wxuser_menu.sql└── vue    └── site        ├── siteweixin-add-or-update.vue        ├── siteweixin.vue        ├── sitewxuser-add-or-update.vue        └── sitewxuser.vue

第三步:整合生成的代码

作者只是说result就可以拿去用了,但是怎么用呢?这里我研究了一下,可以这样和goadmin进行整合:

第四步:添加菜单入口

为了能在goadmin左侧显示菜单入口,需要修改goadmin/template/layout/nav.html,在右侧导航加入菜单项:

<li class="nav-item">    <a href="/sys/oss/index" class="nav-link "><i class="fas fa-cloud-upload-alt"></i>        <span>文件管理</span></a></li><li class="nav-item">    <a href="/site/weixin" class="nav-link "><i class="fas fa-cloud-upload-alt"></i>        <span>微信绑定</span></a></li><li class="nav-item">    <a href="/site/wxuser" class="nav-link "><i class="fas fa-cloud-upload-alt"></i>        <span>微信用户</span></a></li>

第五步:刷新goadmin后台,完成:

后记

通过

egrep -r "weixin|site" result/*  | grep -v vue | grep -v wxuser > /tmp/one.txt

查看改动,为了省略篇幅,去掉vue和wxuser,只看site_weixin的结果。可以看到autocreate工程修改的范围,体会模版做的工作有哪些,感觉还是比较清晰的:

result/html/site/weixin.html:                <div class="breadcrumb-item"><a href="/site/weixin">绑定微信</a></div>result/html/site/weixin.html:                <div class="breadcrumb-item"><a href="/site/weixin">列表</a></div>result/html/site/weixin.html:                                                   v-model="siteweixin.Name"result/html/site/weixin.html:                                                   v-model="siteweixin.ShortId"result/html/site/weixin.html:                                                   v-model="siteweixin.Qrcode"result/html/site/weixin.html:                                                   v-model="siteweixin.CreateTime"result/html/site/weixin.html:                                                   v-model="siteweixin.UpdateTime"result/html/site/weixin.html:                                                   v-model="siteweixin.Status"result/html/site/weixin.html:<script src="/modules/site/weixin.js?_1608464436"></script>result/js/site/weixin.js:        url: baseURL + 'site/weixin/page',result/js/site/weixin.js:        siteweixin:{result/js/site/weixin.js:            vm.siteweixin= {};result/js/site/weixin.js:            var url = vm.siteweixin.Id ==null ? "site/weixin/save" : "site/weixin/update";result/js/site/weixin.js:                data: vm.siteweixin,result/js/site/weixin.js:                    url: baseURL + "site/weixin/delete",result/js/site/weixin.js:                        url: baseURL + "site/weixin/delete",result/js/site/weixin.js:        $.get(baseURL + "site/weixin/get/" +Id, function (r) {result/js/site/weixin.js:            vm.siteweixin= r.data;result/site/config/router.go:    "goadmin/module/site/controller"result/site/config/router.go:    s.Group(urlPath+"/site", func(g *ghttp.RouterGroup) {result/site/config/router.go:        siteWxuserController := new(controller.SiteWxuserController)result/site/config/router.go:        siteWeixinController := new(controller.SiteWeixinController)result/site/config/router.go:        g.ALL("/weixin", siteWeixinController)result/site/config/router.go:        g.POST("/weixin/page", siteWeixinController.Page)result/site/config/router.go:        g.GET("/weixin/get/{id}", siteWeixinController.Get)result/site/config/router.go:        g.POST("/weixin/save", siteWeixinController.Save)result/site/config/router.go:        g.POST("/weixin/update", siteWeixinController.Update)result/site/config/router.go:        g.POST("/weixin/delete", siteWeixinController.Delete)result/site/controller/site_weixin_controller.go:* @File:  site_weixin_controllerresult/site/controller/site_weixin_controller.go:   "goadmin/module/site/model"result/site/controller/site_weixin_controller.go:    base.WriteTpl(r, "site/weixin.html", g.Map{})result/site/model/site_weixin_model.go:* @File:  site_weixin_modelresult/site/model/site_weixin_model.go:    return "site_weixin"result/site/module.go:package siteresult/site/module.go:import "goadmin/module/site/config"result/sql/site_weixin_menu.sql:    VALUES ('1', 'wxmenu', 'site/siteweixin', NULL, '1', 'config', '6');result/sql/site_weixin_menu.sql:    SELECT @parentId, '查看', null, 'site:siteweixin:list,site:siteweixin:info', '2', null, '6';result/sql/site_weixin_menu.sql:    SELECT @parentId, '新增', null, 'site:siteweixin:save', '2', null, '6';result/sql/site_weixin_menu.sql:    SELECT @parentId, '修改', null, 'site:siteweixin:update', '2', null, '6';result/sql/site_weixin_menu.sql:    SELECT @parentId, '删除', null, 'site:siteweixin:delete', '2', null, '6';

总体来说比较清爽,但是要注意,在阅读源代码时,发现搜索功能有个bug:



点击查询的时候,向后台传递的参数是search,





这里却是按name取的字段,修改为:

    if form.Params != nil && form.Params["search"] != "" {        where += " and name like ? "        params = append(params, "%"+form.Params["search"]+"%")    }

之后就好了:


评价

感谢大家阅读到这里,后续如果还有星比较多的项目,我再体验一下,发给大家。