Beego框架几种简易的数据交互

Beego框架几种简易的数据交互


关于beego框架的安装可以自行百度了,还是很容易找的。( 不混字数了)

bee工具装好之后,打开cmd面板输入bee检查后,输入bee new 项目名,回车就可以了。

例如 bee new my_project

1.小小白数据库操作

在注册完数据库驱动之后,如果不知道也不懂百度找的代码不会用的话,建议使用这个无脑函数,只要传入sql语句和对应参数即可。

建表也可以用这个函数

func ModifyDB(sql string, args ...interface{}) (int64, error) {
    result, err := db.Exec(sql, args...)
    if err != nil {
    	log.Println(err)
    	return 0, err
    }
    count, err := result.RowsAffected()
    if err != nil {
    	log.Println(err)
    	return 0, err
    }
    return count, nil
}

2.模板渲染

对于一些简易数据,比如username,user_head_img。

H5文件代码:

{{.Username}}
{{.UserHeadImg}}

Go代码:(在对应路由的controller对应方法中 一般是Get)

func (c *TestController) Get(){
    c.Data["UserHeadImg"] = "图片路径"
    c.Data["Username"] = "user"

    c.TplName = "test.html"
}

但在一些特定场景,我们需要对一系列数据渲染,并按块显示在Web页面,如果前端摸鱼 (就是你全栈),优先使用以下方式。

先对块状的显示H5代码进行编写。

举个栗子:

<div id="home-block-item">
    <a href="/detail?id={{.Id}} style="font-size: 20px; color:#fff; padding: 0 20px 0 0; float: left"">{{.Title}}</a>
    <div style="font-size: 15px; color:#fff; float: right;padding: 0 20px 0 0; ">点赞量:{{.Like}} || 浏览量:{{.Read}} || {{.Author}} || {{.Tag}}</div>
    <br>
    <div style="font-size: 15px; color: #fff; float: left">简介:{{.Short}}</div>
    <br><br>
</div>

可以看见需要传递的有 Id, Title, Like, Read, Author, Tag, Short 七个数据块。而对应用来说肯定是多个Id,多个块数据,因此从数据库里面取出来采用切片的方式。

type Blog struct {
    Id	    string
    UserId  string
    Title   string
    Short   string
    Author  string
    Tag	    string
    Content string
    Like    string
    Read    int
}
type BlogBlockParam struct {
    Id         string
    Title      string
    Tag        string
    Short      string
    Author     string
    Like       string
    Read       int
}
func MakeBlogBlocks(blogs []Blog) template.HTML {
    htmlHome := ""
    for _, blog := range blogs {
        homeParam := BlogBlockParam{}

        homeParam.Id = blog.Id
        homeParam.Title = blog.Title
        homeParam.Author = blog.Author
        homeParam.Short = blog.Short
        homeParam.Tag = blog.Tag
        homeParam.Like = blog.Like
        homeParam.Read = blog.Read

        //处理变量
        //ParseFile解析该文件,用于插入变量
        //template.ParseFiles后的参数就是H5模板文件的路径,在Beego框架中H5文件都是放在view文件夹下。
        t, _ := template.ParseFiles("views/block.html")
        buffer := bytes.Buffer{}
        //就是将html文件里面的比那两替换为穿进去的数据
        t.Execute(&buffer, homeParam)
        htmlHome += buffer.String()
    }
    return template.HTML(htmlHome)
}

可以发现这个函数返回的是H5代码,因此后端代码在controller中也需要调用正确。

//在H5文件中对应位置使用该参数
{{.Contetent}}
----------------------------
//在Controller下调用则是
func (c *TestController) Get(){
    //参数就是数据切片,从Mysql中用select取出来
    c.Data["Content"] = MakeBlogBlocks(blogList)
    
    c.TplName = "test.html"
}

3.Json传递

第二种方法传递数据在Web页面的好看程度取决于全栈师傅的功底,如果你有个大腿前端,你就可以把数据送给他,让大腿直接进行高级渲染。

而你只需要从数据库取出数据,通过json传递给前端处理即可。

数据库取数据代码:

//根据Id来返回数据
func FindMesWithId(Id string) []orm.Params {
    //开启调试模式,可以更好发现sql的操作是否正确
    orm.Debug = true
	
    sql = "select * from mes_info where id=" + Id

    var Mes []orm.Params

    i, e := db.Raw(sql).Values(&Mes)
    fmt.Println("输出是:",i)
    if e != nil {
    	fmt.Println("Raw出错")
    }
    fmt.Println("var是正常的")  

    return Mes
}

(代码里面的print是从学长那学来的print大法,懒人不调试专用)

数据库取到的数据在对应路由的controller中直接丢给前端就好了。

type Mes struct {
    Id        string
    Intro     string
}
...
result := models.FindMesWithId(Id)
var mes [1]Mes
for _, n := range result {
    //n["参数"],其中的参数是数据库中的列名
    mes[0].Id = n["id"].(string)
    mes[0].Intro = n["mes_intro"].(string)
}
c.Data["json"] = map[string]interface{}{"mes": mes, "code": 0}
c.ServeJSON()

如果需要多条数据,那就需要对sql语句修改了,可以看看sql的limit语法,这样取回的数据就有多个,之后在for range中依旧一一赋值再传递即可。

建议

在做项目之前,一定要对数据交互做好交流,最好写好API文档,这样之后前后端对接会比较方便。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值