Beego基础学习(四)Beego的四种数据输出WriteString、XML、JSON、模板渲染输出

 一、直接输出字符串

package controllers

import (
    "fmt"
    "github.com/astaxie/beego"
    "mypro/models"
    "strings"
)

type GetMovieInfoController struct {
    beego.Controller
}

func (c *GetMovieInfoController)  Get() {

    ids := []string{"8", "9", "10"}
    db := models.ConnectDb();
    defer db.Close()

    idStr := strings.Join(ids, "','")
    sqlText := "select id,movie_name,movie_director  from movie_info where id in  ('%s')"
    sqlText = fmt.Sprintf(sqlText, idStr)
    c.Ctx.WriteString(sqlText)   //输出sql

    c.TplName = "get.tpl"
}

二、模板数据输出

package controllers

import (
    "fmt"
    "github.com/astaxie/beego"
    "mypro/models"
    "strings"
)

type GetMovieInfoController struct {
    beego.Controller
}
type MovieInfo struct {
    Id                   int64
    Movie_name           string
    Movie_director       string
}


func (c *GetMovieInfoController)  Get() {

    ids := []string{"11", "9", "10"}
    //c.Ctx.WriteString(idsstr)

    db := models.ConnectDb();
    defer db.Close()


    idStr := strings.Join(ids, "','")
    sqlText := "select id,movie_name,movie_director  from movie_info where id in  ('%s')"
    sqlText = fmt.Sprintf(sqlText, idStr)

       //c.Ctx.WriteString(sqlText )  //直接输出sql
    rows,err := db.Query(sqlText)
    item := MovieInfo{}
    list := []MovieInfo{}

    for rows.Next(){
        var mid int64
        var movie_name, movie_director string
        err = rows.Scan(&mid,&movie_name,&movie_director)
        if err != nil {
            panic(err.Error())
        }
        item.Id = mid
        item.Movie_name = movie_name
        item.Movie_director = movie_director
        list = append(list,item)
    }
    fmt.Println(list)
    c.Data["List"] = list  //把数据列表赋值
    c.Data["Title"] = "正在进行Beego框架基础学习" //动态赋值
    c.TplName = "get.tpl"
}
<body>
  <header>


  </header>
  <h1 style="text-align:center;margin:auto">{{.Title}}</h1>
  <footer>
    <ul>
//遍历输出
    {{ range $MovieInfo := .List }}
    <li style="list-style:none; text-align:left">
    ID:{{ $MovieInfo.Id }}---电影名称:{{ $MovieInfo.Movie_name }}----电影演员:{{ $MovieInfo.Movie_director }}
    </li>
    {{end}}
    </ul>
  </footer>
  <div class="backdrop"></div>

  <script src="/static/js/reload.min.js"></script>
</body>

 三、Json格式输出

通过把要输出的数据放到Data["json"]中,然后调用ServeJSON()进行渲染,就可以把数据进行JSON序列化输出。

beego中ServeJSON()函数定义如下:

package controllers

import (
    "fmt"
    "github.com/astaxie/beego"
    "mypro/models"
    "reflect"
    "strings"
)

type GetMovieInfoController struct {
    beego.Controller
}
type MovieInfo struct {
    Id                   int64
    Movie_name           string
    Movie_director       string
}
type JsonData struct {
    Code        int
    Msg          string
    Data         []MovieInfo  //data结构体类型
}


func (c *GetMovieInfoController)  Get() {
    ids := []string{"11", "9", "10"}
    db := models.ConnectDb();
    defer db.Close()


    idStr := strings.Join(ids, "','")
    sqlText := "select id,movie_name,movie_director  from movie_info where id in  ('%s')"
    sqlText = fmt.Sprintf(sqlText, idStr)
    rows,err := db.Query(sqlText)
    item := MovieInfo{}
    list := []MovieInfo{} //data结构体类型

    for rows.Next(){
        var mid int64
        var movie_name, movie_director string
        err = rows.Scan(&mid,&movie_name,&movie_director)
        if err != nil {
            panic(err.Error())
        }
        item.Id = mid
        item.Movie_name = movie_name
        item.Movie_director = movie_director
        list = append(list,item)
    }
   
    fmt.Println(reflect.TypeOf(list)) //    类型是[]controllers.MovieInfo
    c.Data["json"] = JsonData{200,"获取成功",list}
    c.ServeJSON()
    c.TplName = "get.tpl"
}
{
  "Code": 200,
  "Msg": "获取成功",
  "Data": [
    {
      "Id": 9,
      "Movie_name": "小丑 Joker",
      "Movie_director": "托德·菲利普斯"
    },
    {
      "Id": 10,
      "Movie_name": "婚姻故事 Marriage Story",
      "Movie_director": "诺亚·鲍姆巴赫"
    },
    {
      "Id": 11,
      "Movie_name": "爱尔兰人 The Irishman",
      "Movie_director": "马丁·斯科塞斯"
    }
  ]
}

四、xml格式输出

通过把要输出的数据放到Data["xml"]中,然后调用ServeXML()进行渲染,就可以把数据进行XML序列化输出。

beego中ServeXML()函数定义如下:

package controllers

import (
    "fmt"
    "github.com/astaxie/beego"
    "mypro/models"
    "reflect"
    "strings"
)

type GetMovieInfoController struct {
    beego.Controller
}
type MovieInfo struct {
    Id                   int64
    Movie_name           string
    Movie_director       string
}
type XmlData struct {
    Code        int
    Msg          string
    Data         []MovieInfo  //结构体
}


func (c *GetMovieInfoController)  Get() {

    ids := []string{"11", "9", "10"}
    db := models.ConnectDb();
    defer db.Close()


    idStr := strings.Join(ids, "','")
    sqlText := "select id,movie_name,movie_director  from movie_info where id in  ('%s')"
    sqlText = fmt.Sprintf(sqlText, idStr)
    rows,err := db.Query(sqlText)
    item := MovieInfo{}
    list := []MovieInfo{} //结构体

    for rows.Next(){
        var mid int64
        var movie_name, movie_director string
        err = rows.Scan(&mid,&movie_name,&movie_director)
        if err != nil {
            panic(err.Error())
        }
        item.Id = mid
        item.Movie_name = movie_name
        item.Movie_director = movie_director
        list = append(list,item)
    }
    fmt.Println(reflect.TypeOf(list))
    c.Data["xml"] = XmlData{200,"获取成功",list}
    c.ServeXML()
    c.TplName = "get.tpl"
}
<XmlData>
<Code>200</Code>
<Msg>获取成功</Msg>
<Data>
<Id>9</Id>
<Movie_name>小丑 Joker</Movie_name>
<Movie_director>托德·菲利普斯</Movie_director>
</Data>
<Data>
<Id>10</Id>
<Movie_name>婚姻故事 Marriage Story</Movie_name>
<Movie_director>诺亚·鲍姆巴赫</Movie_director>
</Data>
<Data>
<Id>11</Id>
<Movie_name>爱尔兰人 The Irishman</Movie_name>
<Movie_director>马丁·斯科塞斯</Movie_director>
</Data>
</XmlData>

 

posted @ 2018-09-19 13:45  温柔的风  阅读(1793)  评论(0编辑  收藏  举报