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

Posted by 北朔 on 2021-10-23

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

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

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

例如 bee new my_project

1.小小白数据库操作

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

建表也可以用这个函数

1
2
3
4
5
6
7
8
9
10
11
12
13
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文件代码:

1
2
{{.Username}}
{{.UserHeadImg}}

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

1
2
3
4
5
6
func (c *TestController) Get(){
c.Data["UserHeadImg"] = "图片路径"
c.Data["Username"] = "user"

c.TplName = "test.html"
}

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

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

举个栗子:

1
2
3
4
5
6
7
<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,多个块数据,因此从数据库里面取出来采用切片的方式。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
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中也需要调用正确。

1
2
3
4
5
6
7
8
9
10
//在H5文件中对应位置使用该参数
{{.Contetent}}
----------------------------
//在Controller下调用则是
func (c *TestController) Get(){
//参数就是数据切片,从Mysql中用select取出来
c.Data["Content"] = MakeBlogBlocks(blogList)

c.TplName = "test.html"
}

3.Json传递

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

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

数据库取数据代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//根据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中直接丢给前端就好了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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文档,这样之后前后端对接会比较方便。