golang(4)使用beego + ace admin 开发后台系统 CRUD
2017-04-03 11:59
651 查看
1,关于ace admin
ace admin 是一个非常好的后台系统ui。集成了很多的好东西。非常的方便开发后天系统,而且能很漂亮。
上面有一堆的例子。非常的漂亮。
http://ace.jeka.by/
之前还是收费的。后来在github 上面放了一个项目。
但是没有源码。是压缩之后的代码。而且,付费地址也不再了。
是一个过期了的模板 3 年前的了。
github 地址:
https://github.com/bopoda/ace
项目已经没有人维护了。也没有源码了,原来的购买地址都没有了。做公司的后天系统没啥问题了。
比起其他的也没感觉上不潮但比起原生的 bootstrap 要好看点。
已经不错了,还要啥自行车呢。
我写了一个 go-admin 的demo :
项目地址:
https://github.com/freewebsys/go-admin
代码都上传上去了。
2,做一个 golang的后台管理足够了
项目使用beego 进行开发,使用beego开发还是非常的快速的。将项目 ace 代码 assets 下面的 4个 文件夹拷贝到 beego 项目的 static 文件夹下面:
css font-awesome images js
项目几算导入了。其他两个文件夹不加也罢。
3,model 存储对象
存储对象一个用户表的设计:CREATE TABLE `user_info` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `user_name` varchar(200) DEFAULT NULL, `password` varchar(200) DEFAULT NULL, `name` varchar(200) DEFAULT NULL, `birth_date` varchar(200) DEFAULT NULL, `gender` int(1) DEFAULT NULL, `email` varchar(200) DEFAULT NULL, `phone` varchar(200) DEFAULT NULL, `status` tinyint(1) NOT NULL , `create_time` datetime NOT NULL, `update_time` datetime NOT NULL, UNIQUE KEY `user_name` (`key`), PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
一个简单的用户表
对应的数据操作:
package models import ( "github.com/astaxie/beego/orm" "github.com/astaxie/beego/logs" "time" ) type UserInfo struct { Id int64 `orm:"auto"` UserName string `orm:"size(255)"` //登录名 Password string `orm:"size(255)"` //密码 Name string `orm:"size(255)"` //用户名 BirthDate string `orm:"size(255)"` //生日 Gender int8 //性别 Email string `orm:"size(255)"` //Email Phone string `orm:"size(255)"` //电话 Status int8 //状态 CreateTime time.Time //创建时间 UpdateTime time.Time //更新时间 } func init() { orm.RegisterModel(new(UserInfo)) } //创建&更新 func SaveUserInfoById(m *UserInfo) (err error) { o := orm.NewOrm() var num int64 if m.Id == 0 { m.CreateTime = time.Now() m.UpdateTime = time.Now() if num, err = o.Insert(m); err == nil { logs.Info("Number of records insert in database:", num) } } else { var tmp *UserInfo tmp, err = GetUserInfoById(m.Id) if err == nil { //修改几个参数的名称。 tmp.UserName = m.UserName tmp.Name = m.Name tmp.BirthDate = m.BirthDate tmp.Gender = m.Gender tmp.Email = m.Email tmp.Phone = m.Phone tmp.Status = m.Status tmp.UpdateTime = time.Now() if num, err = o.Update(tmp); err == nil { logs.Info("Number of records updated in database:", num) } } } return } //删除 func DeleteUserInfo(id int64) (err error) { o := orm.NewOrm() v := UserInfo{Id: id} if err = o.Read(&v, "Id"); err == nil { if num, err := o.Delete(&UserInfo{Id: id}); err == nil { logs.Info("Number of records deleted in database:", num) } } return } //按id查询 func GetUserInfoById(id int64) (v *UserInfo, err error) { o := orm.NewOrm() v = &UserInfo{Id: id} if err = o.Read(v, "Id"); err == nil { return v, nil } return nil, err } //查询数据 func QueryAllUserInfo() (dataList []interface{}, err error) { var list []UserInfo o := orm.NewOrm() qs := o.QueryTable(new(UserInfo)) //查询 //查询数据 if _, err = qs.All(&list); err == nil { for _, v := range list { dataList = append(dataList, v) } return dataList, nil } return nil, err }
参考了bee go 自动生成的代码。但是发现beego 升级了之后模板变了。
其中特别要主要 := 的坑,如果稍不留神就会替换掉对象在一个作用域下,而且不会报错呢。
4,controller 控制
package controllers import ( "github.com/astaxie/beego/logs" "github.com/astaxie/beego" "github.com/freewebsys/go-admin/models" ) type UserInfoController struct { beego.Controller } //修改 func (c *UserInfoController) Edit() { //获得id id, _ := c.GetInt64("Id", 0) userInfo, err := models.GetUserInfoById(id) if err == nil { c.Data["UserInfo"] = userInfo } else { tmpUserInfo := &models.UserInfo{} tmpUserInfo.Status = -1 tmpUserInfo.Gender = -1 c.Data["UserInfo"] = tmpUserInfo } c.TplName = "userInfo/edit.html" } //删除 func (c *UserInfoController) Delete() { //获得id id, _ := c.GetInt64("Id", 0) if err := models.DeleteUserInfo(id); err == nil { c.Data["json"] = "ok" } else { c.Data["json"] = "error" } c.ServeJSON() } //保存 func (c *UserInfoController) Save() { //自动解析绑定到对象中 userInfo := models.UserInfo{} if err := c.ParseForm(&userInfo); err == nil { if err := models.SaveUserInfoById(&userInfo); err == nil { c.Data["json"] = "" } else { c.Data["json"] = "error" } } else { c.Data["json"] = "error" } c.ServeJSON() } //返回全部数据 func (c *UserInfoController) List() { dataList, err := models.QueryAllUserInfo() if err == nil { c.Data["List"] = dataList } logs.Info("dataList :", dataList) c.TplName = "userInfo/list.html" }
5,view 展示
展示列表:参考:http://ace.jeka.by/tables.html
<table id="simple-table" class="table table-bordered table-hover"> <tr> <th>Id</th> <th>姓名</th> <th>生日</th> <th>性别</th> <th>Email</th> <th>电话</th> <th>状态</th> <th>创建时间</th> <th>更新时间</th> <th>操作</th> </tr> {{range .List}} <tr> <td>{{.Id}}</td> <td>{{.Name}}</td> <td>{{.BirthDate}}</td> <td>{{.Gender}}</td> <td>{{.Email}}</td> <td>{{.Phone}}</td> <td>{{.Status}}</td> <td>{{date .CreateTime "2006-01-02 15:04:05"}}</td> <td>{{date .UpdateTime "2006-01-02 15:04:05"}}</td> <td> <div class="hidden-sm hidden-xs btn-group"> <button class="btn btn-xs btn-info" onclick="showEditWindow('{{.Id}}');"> <i class="ace-icon fa fa-pencil bigger-120"></i> </button> <button class="btn btn-xs btn-danger" onclick="deleteConfirm('{{.Id}}');"> <i class="ace-icon fa fa-trash-o bigger-120"></i> </button> </div> </td> </tr> {{end}} </table>
特别注意对时间字段的格式化:{{date .UpdateTime “2006-01-02 15:04:05”}} 不是java习惯的 yyyy-MM-dd
感觉上一点也不好记。是按照老外的习惯记住的 1 2 3 4 5 6 的规则命名的。
创建& 编辑:
将对象放到 data里面,然后做展示编辑。
<div class="col-sm-9"> <input type="text" id="UserName" name="UserName" placeholder="登录名" class="col-xs-10 col-sm-5" value="{{.UserInfo.UserName}}"/> </div>
其中编辑使用div 窗口弹出参考:
http://ace.jeka.by/form-elements.html
http://ace.jeka.by/content-slider.html
并且页面进行校验:
使用的教研框架:http://jqueryvalidation.org/
jQuery(function ($) { $('#saveForm').validate({ errorElement: 'div', errorClass: 'help-block', focusInvalid: false, ignore: "", rules: { UserName: { required: true, } }, highlight: function (e) { $(e).closest('.form-group').removeClass('has-info').addClass('has-error'); }, success: function (e) { $(e).closest('.form-group').removeClass('has-error');//.addClass('has-info'); $(e).remove(); } }); }); //保存,之前进行校验 function save() { if ($('#saveForm').valid()) { $.post("/admin/userInfo/save", $("#saveForm").serialize(), function (data) { window.location.reload(); }); } }
7,拦截器
//增加拦截器。 var filterAdmin = func(ctx *context.Context) { url := ctx.Input.URL() logs.Info("##### filter url : %s", url) //TODO 如果判断用户未登录。 } beego.InsertFilter("/admin/*", beego.BeforeExec, filterAdmin)
可以针对 /admin/* 进行拦截
8,关闭防火墙
在 mac 上面发现总是要允许端口,开发比较讨厌,请关闭防火墙:6,总结
beego 开发一个admin系统还是挺快的。因为beego 可以自动检查代码改的,自动重启,开发速度还是很快的。
并且因为beego的编译启动还是非常的快速的。
所以开发速度还是挺快的。golang的代码还需要适应下。上手还是挺快的。1,2个星期就能开发一个小系统。
做个用户权限,登录啥的都非常方便。
本文的原文连接是: http://blog.csdn.net/freewebsys/article/details/68955060 未经博主允许不得转载。
博主地址是:http://blog.csdn.net/freewebsys
相关文章推荐
- 一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之预告篇
- 一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之登录窗口调试
- Golang框架beego和bee的开发使用
- 使用Metronic开发的后台管理系统基础架构
- 一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之登录窗口
- 一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之完成登录功能
- 使用Metronic开发的后台管理系统的基础架构(bootstrap 3.3.5)
- PHP+MYSQL新闻系统开发之后台更新与删除文件admin_news_class.php
- golang基础-beego_web开发、模板使用(待续)
- 一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之登录窗口调试
- 一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之调整首页显示
- 一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之完成登录功能
- Android开发之获取系统管理权限,即DevicePolicyManager和DeviceAdminReceiver的使用
- 一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之预告篇
- 一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之登录窗口调试
- 一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之完成登录功能
- 一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之调整首页显示
- golang(5)使用beego 开发 api server 和前端同学拆分开发,使用swagger
- 使用 NodeJs 实现一个本地接口数据系统,无需数据库,让前端独立于后台开发
- Golang 使用 Beego 与 Mgo 开发的示例程序