首先建立模型
package models
import "time"
type Friendlink struct {
Id int64
Name string `description:"网站名称"`
Logo string `orm:"null" description:"网站logo"`
Url string `description:"网站链接"`
Sort int `orm:"default(50)"`
Created time.Time `orm:"auto_now_add;type(datetime)"`
Updated time.Time `orm:"auto_now;type(datetime)"`
}
一般是需要模型,逻辑。控制器分开,所以我新建了logics文件夹作为逻辑包
在逻辑包里进行数据验证,以及curd操作
package logics
import (
"myshop/app/models"
"github.com/astaxie/beego/orm"
"github.com/astaxie/beego/validation"
)
type FriendlinkForm struct {
Id int64 `form:"-"`
Name string `form:"name"`
Logo string `form:"logo"`
Url string `form:"url"`
Sort int `form:"sort"`
// Url string `form:"url" valid:"Required"`
}
// 验证
// 返回 bool, string(错误信息)
func (form *FriendlinkForm) Validate() string {
validator := validation.Validation{}
validator.Required(form.Name, "名称").Message("不能为空")
validator.Required(form.Url, "链接").Message("不能为空")
validator.Min(form.Sort, 0, "排序").Message("必须是数字")
var errMessage = ""
isValid, err := validator.Valid(form)
if err != nil {
errMessage = "验证失败"
}
if !isValid {
for _, err := range validator.Errors {
errMessage += "<p>" + err.Key + ": " + err.Message + "</p>"
}
}
return errMessage
}
// 获取所有
// 返回 models结果集 bool
func (form *FriendlinkForm) FindAll() (lists []models.Friendlink, res bool) {
o := orm.NewOrm()
model := new(models.Friendlink)
qs := o.QueryTable(model)
_, err := qs.All(&lists)
if err != nil {
return nil, false
}
return lists, true
}
// 根据id获取一条
// 参数 id
// 返回 models结果 bool
func (form *FriendlinkForm) FindById(id int64) (model models.Friendlink, res bool) {
model = models.Friendlink{Id: id}
o := orm.NewOrm()
err := o.Read(&model)
if err == orm.ErrNoRows {
return model, false
} else {
return model, true
}
}
// 添加1条记录
// 返回 插入id bool
func (form *FriendlinkForm) NewRecord() (id int64, res bool) {
o := orm.NewOrm()
var model models.Friendlink
model.Name = form.Name
model.Logo = form.Logo
model.Url = form.Url
model.Sort = form.Sort
id, err := o.Insert(&model)
if err == nil {
return id, true
} else {
return 0, false
}
}
// 更新
// 参数 id
// 返回 bool
func (form *FriendlinkForm) UpdateRecord(id int64) bool {
o := orm.NewOrm()
model := models.Friendlink{Id: id}
if o.Read(&model) == nil {
model.Name = form.Name
model.Logo = form.Logo
model.Url = form.Url
model.Sort = form.Sort
if _, err := o.Update(&model); err == nil {
return true
}
}
return false
}
func (form *FriendlinkForm) DeleteRecord(id int64) bool {
o := orm.NewOrm()
if _, err := o.Delete(&models.Friendlink{Id: id}); err == nil {
return true
} else {
return false
}
}
控制器中使用
package backend
import (
"myshop/app/models"
"myshop/app/logics"
"html/template"
"github.com/astaxie/beego"
)
type FriendlinkController struct {
BaseController
}
// 列表
func (this *FriendlinkController) Index() {
beego.ReadFromRequest(&this.Controller)
form := new(logics.FriendlinkForm)
var lists []models.Friendlink
lists, res := form.FindAll()
if res {
this.Data["lists"] = lists
}
this.TplName = "backend/friendlink/index.html"
}
// 添加页面
func (this *FriendlinkController) Add() {
beego.ReadFromRequest(&this.Controller)
model := new(models.Friendlink)
model.Sort = 50
this.Data["model"] = model
this.Data["xsrfdata"] = template.HTML(this.XSRFFormHTML())
this.TplName = "backend/friendlink/add.html"
}
// 保存数据
func (this *FriendlinkController) Create() {
form := new(logics.FriendlinkForm)
flash := beego.NewFlash()
if err := this.ParseForm(form); err != nil {
flash.Error("表单错误")
flash.Store(&this.Controller)
this.Redirect(beego.URLFor("backend.FriendlinkController.Add"), 302)
return
}
err := form.Validate()
if err != "" {
flash.Set("validator", err)
flash.Store(&this.Controller)
this.Redirect(beego.URLFor("backend.FriendlinkController.Add"), 302)
return
}
_, res := form.NewRecord()
if !res {
flash.Error("保存失败")
flash.Store(&this.Controller)
this.Redirect(beego.URLFor("backend.FriendlinkController.Add"), 302)
return
}
flash.Error("保存成功")
flash.Store(&this.Controller)
this.Redirect(beego.URLFor("backend.FriendlinkController.Index"), 302)
}
// 修改页面
func (this *FriendlinkController) Edit() {
beego.ReadFromRequest(&this.Controller)
form := new(logics.FriendlinkForm)
var model models.Friendlink
id, _ := this.GetInt(":id")
model, res := form.FindById(int64(id))
if res {
this.Data["model"] = model
this.Data["xsrfdata"] = template.HTML(this.XSRFFormHTML())
this.TplName = "backend/friendlink/edit.html"
} else {
flash :=beego.NewFlash()
flash.Error("没找到相关信息")
flash.Store(&this.Controller)
this.Redirect(beego.URLFor("backend.FriendlinkController.Index"), 302)
}
}
// 更新数据
func (this *FriendlinkController) Update() {
id, _ := this.GetInt(":id")
form := new(logics.FriendlinkForm)
flash := beego.NewFlash()
if err := this.ParseForm(form); err != nil {
flash.Error("表单错误")
flash.Store(&this.Controller)
this.Redirect(beego.URLFor("backend.FriendlinkController.Edit", ":id", id), 302)
return
}
err := form.Validate()
if err != "" {
flash.Set("validator", err)
flash.Store(&this.Controller)
this.Redirect(beego.URLFor("backend.FriendlinkController.Edit", ":id", id), 302)
return
}
res := form.UpdateRecord(int64(id))
if !res {
flash.Error("保存失败")
flash.Store(&this.Controller)
this.Redirect(beego.URLFor("backend.FriendlinkController.Edit", ":id", id), 302)
return
}
flash.Error("保存成功")
flash.Store(&this.Controller)
this.Redirect(beego.URLFor("backend.FriendlinkController.Index"), 302)
}
// 删除数据
func (this *FriendlinkController) Delete() {
form := new(logics.FriendlinkForm)
id, _ := this.GetInt(":id")
res := form.DeleteRecord(int64(id))
flash := beego.NewFlash()
if res {
flash.Error("删除成功")
} else {
flash.Error("删除失败")
}
flash.Store(&this.Controller)
this.Redirect(beego.URLFor("backend.FriendlinkController.Index"), 302)
}