beego curd

博客介绍了建模的基本步骤,强调将模型、逻辑和控制器分开。新建logics文件夹作为逻辑包,在其中进行数据验证和curd操作,控制器负责使用逻辑包中的内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先建立模型

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)
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值