【Go】Go语言 - beego框架深入浅出

视频地址: https://www.bilibili.com/video/BV1tE411h791?p=8
代码:https://github.com/why19970628/go_blog

创建项目

bee new class

运行

要养成良好的习惯,在终端运行,否则可能会找不要静态资源目录。

ORM

在这里插入图片描述
创建数据库

package models

import (
	"github.com/astaxie/beego/orm"
	_ "github.com/go-sql-driver/mysql"
)

type User struct {
	Id int
	Name string
	Pwd string

}

func init()  {
	// 注册驱动
	//orm.RegisterDriver("mysql", orm.DR_MySQL)
	// 注册默认数据库
	// 我的mysql的root用户密码为tom,打算把数据表建立在名为test数据库里
	// 备注:此处第一个参数必须设置为“default”(因为我现在只有一个数据库),否则编译报错说:必须有一个注册DB的别名为 default
	orm.RegisterDataBase("default", "mysql", "root:123456@tcp(127.0.0.1:3306)/test?charset=utf8")
	orm.RegisterModel(new(User))
	// //自动建表                         重新
	orm.RunSyncdb("default",false,true)
}

在这里插入图片描述

Beego ORM插入

package controllers

import (
	"class/models"
	"github.com/astaxie/beego"
	"github.com/astaxie/beego/orm"
	_ "class/models"
)

type MainController struct {
	beego.Controller
}

func (c *MainController) Get() {
	// orm对象
	o := orm.NewOrm()
	user := models.User{
		Id:   0,
		Name: "wang",
		Pwd:  "666",
	}
	_, err := o.Insert(&user)
	if err !=nil{
		beego.Info("插入失败",err)
		return
	}

查询

除了id,需要给其他字段赋值

package controllers

import (
	"class/models"
	"fmt"
	"github.com/astaxie/beego"
	"github.com/astaxie/beego/orm"
	_ "class/models"
	_ "github.com/go-playground/locales/om"
)

type MainController struct {
	beego.Controller
}

func (c *MainController) Get() {
	// orm对象
	//o := orm.NewOrm()
	//user := models.User{
	//	Id:   0,
	//	Name: "wang",
	//	Pwd:  "666",
	//}
	//_, err := o.Insert(&user)
	//if err !=nil{
	//	beego.Info("插入失败",err)
	//	return

	o := orm.NewOrm()
	user := models.User{}

	//user.Id = 1
	//err := o.Read(&user)
	user.Name = "wang"
	err := o.Read(&user,"Name")
	if err != nil {
		beego.Info("查询失败",err)
	}

	beego.Info("查询成功", user)
	fmt.Print("查询:",user)

	c.Data["data"] = "beego.me"
	c.TplName = "index.html"
}


func (c *MainController) Post() {
	c.Data["data"] = "哈哈"
	c.TplName = "index.html"
}

文件上传

格式、大小、文件名

总结

//文章结构体
type Article struct {
	Id int `orm:"pk;auto"`
	ArtiName string `orm:"size(20)"`    // 文章名字
	Atime time.Time `orm:"auto_now"`    // 发布时间
	Acount int `orm:"default(0);null"`  // 阅读量
	Acontent string  					// 文章内容
	Aimg string							// 图片
	Atype string						// 类型

	//ArticleType*ArticleType `orm:"rel(fk)"`
	//User []*User `orm:"reverse(many)"`
}

删除提示

<script type="application/javascript">
        window.onload =function () {
            $(".dels").click(function() {
                if(!confirm("是否确认删除?")){
                    return false
                }
            })
        }
    </script>

在这里插入图片描述

分页

获取总数,当前页,以及分页数量

// 显示首页内容
func (c *ArticleController)ShowIndex() {
	o := orm.NewOrm()
	var articles []models.Article
	qs := o.QueryTable("Article")
	//qs.All(&articles)
	pageIndex := c.GetString("pageIndex")
	pageIndex1 := 1
	pageIndex1, _= strconv.Atoi(pageIndex)
	if pageIndex1 < 1{
		pageIndex1 =1
	}

	count, err := qs.Count()

	pageSize := 2
	start := pageSize * (pageIndex1 -1)
	qs.Limit(pageSize,start).RelatedSel("ArticleType").All(&articles)

	// 分页取整 +1
	pageCount := float64(count)/float64(pageSize)
	pageCount = math.Ceil(pageCount)

	if err != nil{
		beego.Info("查询所有文章信息出错")
		return
	}
	// 分页: 判断当前页是否为首页或尾页
	var FirstPage bool = false
	var LastPage bool = false
	//
	if pageIndex1 ==1{
		FirstPage = true
	}
	if pageIndex1 == int(pageCount){
		LastPage = true
	}

	// 获取文章类型
	var types []models.ArticleType
	o.QueryTable("ArticleType").All(&types)
	c.Data["types"] = types


	beego.Info("count = ",count)
	//beego.Info(articles)
	c.Data["FirstPage"] =FirstPage
	c.Data["LastPage"] =LastPage
	c.Data["count"] =count
	c.Data["pageCount"] = pageCount
	c.Data["articles"] = articles
	c.Data["pageIndex"] = pageIndex1
	c.TplName = "index.html"
}

在模板中,可以添加函数来进行页数的加一减一操作

<ul class="pagenation">
            <li><a href="/article/index">首页</a></li>
            {{if compare .FirstPage true}}
                <li>上一页</li>
            {{else}}
                <li> <a href="/article/index?pageIndex={{.pageIndex | PageUp}}">上一页</a></li>
            {{end}}
            {{if compare .LastPage true}}
                <li>下一页</li>
            {{else}}
                <li> <a href="/article/index?pageIndex={{.pageIndex | PageDown}}">下一页</a></li>
            {{end}}
            <li><a href="/article/index?pageIndex={{.pageCount}}">末页</a></li>
            <li>{{.count}}条记录/{{.pageCount}}/当前{{.pageIndex}}</li>
        </ul>
  • 在main函数中注册函数,实现分页效果
package main

import (
	_ "class/models"
	_ "class/routers"
	"github.com/astaxie/beego"
	"strconv"
)

func main() {
	beego.AddFuncMap("PageUp",PageUp)
	beego.AddFuncMap("PageDown",PageDown)
	beego.Run()
}

func PageUp(page int) string {
	pageIndex := page -1
	if pageIndex <1{

	}
	pageIndex1 := strconv.Itoa(pageIndex)
	return pageIndex1
}

func PageDown(page int) string {
	pageIndex := page + 1
	pageIndex1 := strconv.Itoa(pageIndex)
	return pageIndex1
}

惰性查询

在需要查询关联表的时候,需要加入 RelatedSel的属性来关联查询,不然获取不到值

qs.Limit(pageSize,start).RelatedSel("ArticleType").All(&articles)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值