beego数据输出
beego数据输出
概览

直接输出字符串
通过beego.Controller.Ctx.WriteString()方法可以直接向http response body中输出字符串
beego中的函数定义如下:
// WriteString Write string to response body.
// it sends response body.
func (ctx *Context) WriteString(content string) {
    ctx.ResponseWriter.Write([]byte(content))
}示例:直接在response body中输出Hello World!
package controllers
import (
    "github.com/astaxie/beego"
)
type MainController struct {
    beego.Controller
}
func (c *MainController) Get() {
    c.Ctx.WriteString("Hello World!")
}打开http跟踪可以看到,在http response body中只有Hello World!,都没有html标签。

模板数据输出
静态模板数据输出
通过简单的指定beego.Controller.TplName模板文件,http response body将输出模板文件对应的内容。
示例:
package controllers
import (
    "github.com/astaxie/beego"
)
type MainController struct {
    beego.Controller
}
func (c *MainController) Get() {
    c.TplName = "hello.tpl"
}<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
</head>
<body>
    <h1>Hello World!</h1>
</body>
</html>
动态模板数据输出
在web中大部分的内容是静态的,只有少部分数据是动态的。为了复用模板的代码,需要能够把动态的数据插入到模板中,这需要特出的语法。
beego中模板通过{{}}包含需要被替换的字段,同时需要把要替换的内容添加到Controller的Data中,这样Controller执行时会自动匹配渲染模板。
示例:
package controllers
import (
    "github.com/astaxie/beego"
)
type MainController struct {
    beego.Controller
}
func (c *MainController) Get() {
    c.Data["Email"] = "arestrack@163.com"
    c.TplName = "hello.tpl"
}<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
</head>
<body>
    <h1>Hello World!</h1>
    Contact me:
    <a class="email" href="mailto:{{.Email}}">{{.Email}}</a>
</body>
</html>
json格式数据输出
通过把要输出的数据放到Data["json"]中,然后调用ServeJSON()进行渲染,就可以把数据进行JSON序列化输出。
beego中ServeJSON()函数定义如下:
// ServeJSON sends a json response with encoding charset.
func (c *Controller) ServeJSON(encoding ...bool) {
    var (
        hasIndent   = true
        hasEncoding = false
    )
    if BConfig.RunMode == PROD {
        hasIndent = false
    }
    if len(encoding) > 0 && encoding[0] {
        hasEncoding = true
    }
    c.Ctx.Output.JSON(c.Data["json"], hasIndent, hasEncoding)
}示例:
type JSONStruct struct {
    Code int
    Msg  string
}
func (c *MainController) Get() {
    mystruct := &JSONStruct{0, "hello"}
    c.Data["json"] = mystruct
    c.ServeJSON()
}
xml格式数据输出
通过把要输出的数据放到Data["xml"]中,然后调用ServeXML()进行渲染,就可以把数据进行XML序列化输出。
beego中ServeXML()函数定义如下:
// ServeXML sends xml response.
func (c *Controller) ServeXML() {
    hasIndent := true
    if BConfig.RunMode == PROD {
        hasIndent = false
    }
    c.Ctx.Output.XML(c.Data["xml"], hasIndent)
}示例:
type XMLStruct struct {
    Code int
    Msg  string
}
func (c *MainController) Get() {
    mystruct := &XMLStruct{0, "hello"}
    c.Data["xml"] = mystruct
    c.ServeXML()
}
jsonp调用
通过把要输出的数据放到Data["jsonp"]中,然后调用ServeJSONP()进行渲染,会设置content-type为application/javascript,然后同时把数据进行JSON序列化,然后根据请求的callback参数设置jsonp输出。
beego中ServeJSONP()函数定义如下:
// ServeJSONP sends a jsonp response.
func (c *Controller) ServeJSONP() {
    hasIndent := true
    if BConfig.RunMode == PROD {
        hasIndent = false
    }
    c.Ctx.Output.JSONP(c.Data["jsonp"], hasIndent)
}示例:
type JSONStruct struct {
    Code int
    Msg  string
}
func (c *MainController) Get() {
    mystruct := &JSONStruct{0, "hello"}
    c.Data["jsonp"] = mystruct
    c.ServeJSONP()
}
beego数据输出的更多相关文章
- 把数据输出到Word (组件形式)
		上一篇的文章中我们介绍了在不使用第三方组件的方式,多种数据输出出到 word的方式,最后我们也提到了不使用组件的弊端,就是复杂的word我们要提前设置模板.编码不易控制.循环输出数据更是难以控制.接下 ... 
- 把数据输出到Word (非插件形式)
		项目开发过程中,我们要把数据以各种各样的形式展现给客户.把数据以文档的形式展现给客户相信是一种比较头疼的问题,如果没有好的方法会 使得我的开发繁琐,而且满足不了客户的需求.接下来我会通过两种开发方式介 ... 
- jquery: json树组数据输出到表格Dom树的处理方法
		项目背景 项目中需要把表格重排显示 处理方法 思路主要是用历遍Json数组把json数据一个个append到5个表格里,还要给每个单元格绑定个单击弹出自定义对话框,表格分了单双行,第一行最后还要改ro ... 
- 【matlab】将matlab中数据输出保存为txt或dat格式
		将matlab中数据输出保存为txt或dat格式 总结网上各大论坛,主要有三种方法. 第一种方法:save(最简单基本的) 具体的命令是:用save *.txt -ascii x x为变量 *.txt ... 
- 将matlab中数据输出保存为txt或dat格式
		:FID= FOPEN(filename,permission) 用指定的方式打开文件 FID=+N(N是正整数):表示文件打开成功,文件代号是N. FID=-1 : 表示文件打 ... 
- ffmpeg 从内存中读取数据(或将数据输出到内存)
		更新记录(2014.7.24): 1.为了使本文更通俗易懂,更新了部分内容,将例子改为从内存中打开. 2.增加了将数据输出到内存的方法. 从内存中读取数据 ffmpeg一般情况下支持打开一个本地文件, ... 
- 使用MapReduce查询Hbase表指定列簇的全部数据输出到HDFS(一)
		package com.bank.service; import java.io.IOException; import org.apache.hadoop.conf.Configuration;im ... 
- 《物联网框架ServerSuperIO教程》- 22.动态数据接口增加缓存,提高数据输出到OPCServer和(实时)数据库的效率
		22.1 概述及要解决的问题 设备驱动有DeviceDynamic接口,可以继承并增加新的实时数据属性,每次通讯完成后更新这些属性数据.原来是通过DeviceDynamic接口实体类反射的方式获 ... 
- 《物联网框架ServerSuperIO教程》- 23.动态数据接口增加缓存,提高数据输出到OPCServer和(实时)数据库的效率
		22.1 概述及要解决的问题 设备驱动有DeviceDynamic接口,可以继承并增加新的实时数据属性,每次通讯完成后更新这些属性数据.原来是通过DeviceDynamic接口实体类反射的方式获 ... 
随机推荐
- cdoj1342郭大侠与甲铁城
			地址:http://acm.uestc.edu.cn/#/problem/show/1342 题目: 郭大侠与甲铁城 Time Limit: 1500/800MS (Java/Others) ... 
- HTTP与服务器的四种交互方式
			Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE.URL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而HTTP ... 
- Go语言学习之运算符(The way to go)
			生命不止,继续go go go 今天介绍go中的运算符. 运算符大概分为: Arithmetic Operators Relational Operators Logical Operators Bi ... 
- ubuntu 致命错误: zlib.h:没有那个文件或目录【转】
			本文转载自:https://blog.csdn.net/u013359794/article/details/44922685?locationnum=15&fps=1 编译时,出现错误,提示 ... 
- 《Maven实战》第5章 坐标和依赖
			5.1 Maven坐标——项目唯一标识 groupId(必须定义):定义Mavan项目隶属的实际项目,如SpringFramework,一个实际项目可包含多个Maven项目 artifactId(必须 ... 
- spark集群安装
			cd到conf中去 修改名字 mv spark-env.sh.template spark-env.sh 并且修改内容 添加: export JAVA_HOME=/root/java/jdk1.8 ... 
- jQuery的序列化元素  serialize()方法  serializeArray()方法     param()方法
			当提交的表单元素较多时用serialize()方法,serialize()方法也是作用于一个jQuery的对象,它能够将DOM元素内容序列化为字符串,用于Ajax请求. serialize() 方法通 ... 
- java用servlet、cookie实现一个阅读记录
			效果如图 代码1 package com.xiaostudy.servlet; import java.io.IOException; import java.io.PrintWriter; impo ... 
- angular2.x  多选框事件
			angular2.x - 4.x 的多选框事件 ng2 -- ng4 反正都是用es6 都统称为2.x吧. 下面贴代码 html界面 <div class="row"> ... 
- ButterKnife使用详谈
			(1)ButterKnife是什么? 在开发过程中,我们总是会写大量的findViewById和点击事件,像初始view.设置view监听这样简单而重复的操作让人觉得特别麻烦,当然不会偷懒的程序员不是 ... 
