1环境准备
命令行执行
1.
go get github.com/beego/bee
2.
go get github.com/astaxie/beego
如果抛错超时,则修改host文件,添加以下语句,然后使用ipconfig /flushdns刷新
# github访问
# 69.171.224.40 github.global.ssl.fastly.net
# 185.199.111.153 assets-cdn.github.com
140.82.112.4 github.com
140.82.114.4 www.github.com
如果抛错连接错误。则在环境变量中设置GOPROXY
GOPROXY=https://goproxy.cn,direct
然后下载最新的go压缩包,直接替换掉之前的安装包,重启电脑
安装好这些包后,将GOPATH/bin下的bee.exe路径添加到环境变量
2 设置模板路径
模板路径默认在views,如果需要设置成自定义路径,有两种方式
第一种是在main.go文件中的beego.Run()代码前添加beego.SetViewsPath("html")代码,html路径即为自定义的路径,第二种是在配置文件app.conf中设置,添加一行viewspath=html
如果不需要模板渲染,则可以在配置文件中配置autorender=false或者在main,go中配置beego.BConfig.WebConfig.AutoRender = false
beego.SetStaticPath("/static", "front")设置静态文件位置,此句表示将url为static的指向front文件夹
3模板解析语法
模板解析后端数据使用{{.key}}进行解析,其中的点不可缺失,代表解析的上下文。
4获取get传参
get传参分为query和param两种方式,每种方式都有两种方式获取参数,query型可以使用p.GetString("name")或者p.Input().Get("name")获取name参数的值。param使用p.GetString(":id")和p.Ctx.Input.Param(":id")获取id参数的值
4.1获取query型get传参
传参形式 /param?name=laowang
beego.Router("/param", &controllers.ParamController{})
type ParamController struct {
beego.Controller
}
func (p *ParamController) Get() {
//使用key=value形式传参
name := p.GetString("name")
name2 := p.Input().Get("name")
p.Data["json"] = map[string]string{"name": name,
"input": name2}
p.ServeJSON()
}
4.2获取param型get传参
传参形式/param/111
# 限制id为int类型
beego.Router("/param/?:id:int", &controllers.ParamController{})
# 不限制id类型
beego.Router("/param/?:id", &controllers.ParamController{})
type ParamController struct {
beego.Controller
}
func (p *ParamController) Get() {
//使用key=value形式传参
//http://127.0.0.1:5000/param/111?name=liyuhu
id := p.GetString(":id")
id2 := p.Ctx.Input.Param(":id")
p.Data["json"] = map[string]string{"id": id, "inputId": id2}
p.ServeJSON()
}
5获取form表单数据
5.1直接获取form表单数据
直接获取form表单数据,可以通过p.GetString和p.Input()两种方式获取数据。获取字符串使用GetString,获取整型通过GetInt64,获取浮点型通过GetFloat,获取布尔型通过GetBool。除字符串获取外,其他的获取方式都是返回两个值,一个获取的值和error。
如果获取的值与类型不匹配,则会使用默认值(如price前端传参为浮点型,应该使用GetFloat获取,而使用GetInt64去获取,获取的将是0这个默认的int值)。
func (p *ParamController) Post() {
username := p.GetString("username")
age := p.Input().Get("age")
age1, _ := p.GetInt64("age")
price,_ := p.GetFloat("price")
price1,_ := p.GetInt64("price")
is_true,_ := p.GetBool("is_true")
p.Data["json"] = map[string]string{"username": username,
"age": age}
fmt.Println(age1, price, price1, is_true)
p.ServeJSON()
}
5.2解析数据到结构体
解析form表单数据到结构体,需要先定义结构体,并使用``对其起别名,以保持与前端的传参名一致。
定义好结构体后,使用j.ParseForm获取表单中的数据,并传入结构体类型的变量指针。解析后的值就存入了结构体类型的变量中。
type UserStruct struct {
Name string `form:"name"`
Age int `form:"age"`
}
func (j *JsonTestController) Post() {
user := UserStruct{}
err := j.ParseForm(&user)
if (err == nil) {
fmt.Println(user)
}
j.Data["json"] = user
j.ServeJSON()
}
5.3接收ajax传输的数据
若要接收ajax发送的数据,需要在conf文件夹下的app.conf文件中添加如下设置
copyrequestbody=true
然后控制器中使用如下方式获取数据
# 初始化一个结构体变量
var user UserStruct
# 获取ajax数据(为二进制格式)
body := p.Ctx.Input.RequestBody
# 将二进制数据解析到结构体中
json.Unmarshal(body, &user)
p.Data["json"] = map[string]string{"name":"wang","type":"book"}
p.ServeJSON()
ajax传输数据时,前端需要将数据格式转换为与结构体中字段对应的格式(type),否则获取不到值
5.4其他格式数据传输
5.4.1json格式数据传输
func (p *ParamController) Get() {
user := UserStruct{Id:1,UserName: "abc", Age: 12}
p.Data["json"] = &user
p.ServeJSON()
}
5.4.2xml格式传输
func (p *ParamController) Get() {
user := UserStruct{Id:1,UserName: "abc", Age: 12}
p.Data["xml"] = &user
p.ServeXML()
}
5.4.3jsonp格式
func (p *ParamController) Get() {
user := UserStruct{Id:1,UserName: "abc", Age: 12}
p.Data["jsonp"] = &user
p.ServeJSONP()
}
5.4.4yaml格式
func (p *ParamController) Get() {
user := UserStruct{Id:1,UserName: "abc", Age: 12}
p.Data["yaml"] = &user
p.ServeYAML()
}
6flash格式数据传输
在post中向flash中填入值,在get中获取flash的值并返回不同的界面。
func (p *ParamController) Get() {
flash := beego.ReadFromRequest(&f.Controller)
notice := flash.Data("notice")
err := flash.Data("error")
if len(err)!=0{
p.TplName = "error.html"
} else if len(notice)!=0 {
p.TplName = "success.html"
}
}
func (p *ParamController) Post() {
flash := beego.NewFlash()
if
flash.Error("服务错误")
flash.Notice("返回成功")
flash.Warning("数据可能有误")
}