美文网首页
第十二节 beego

第十二节 beego

作者: barriers | 来源:发表于2021-11-07 13:24 被阅读0次

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("数据可能有误")
}

相关文章

网友评论

      本文标题:第十二节 beego

      本文链接:https://www.haomeiwen.com/subject/zxrezltx.html