zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    tableau学习笔记—1
    sql学习笔记1
    rpy2的安装问题?【解决】
    python_广州房价热力图
    数据清洗记录——.图书馆学号去敏
    python argparse
    利用torch.nn实现前馈神经网络解决 多分类 任务
    R7000P Ubuntu20.04 安装 Realtek 8852 无线网卡驱动
    邻接矩阵的相乘的意义
    分类问题中评价指标
  • 原文地址:https://www.cnblogs.com/wt645631686/p/9709948.html
Copyright © 2011-2022 走看看