package routers
import (
beego "github.com/beego/beego/v2/server/web"
"p001/controllers"
)
func init() {
beego.Router("/", &controllers.MainController{})
beego.Router("/hello/rjson", &controllers.HelloController{}, "get:ReturnJSON")
beego.Router("/hello/json", &controllers.HelloController{}, "post:Json")
beego.Router("/hello/xml", &controllers.HelloController{}, "post:Xml")
}
package controllers
import (
"encoding/json"
"encoding/xml"
"fmt"
"github.com/beego/beego/v2/core/validation"
beego "github.com/beego/beego/v2/server/web"
)
type Student struct {
Id string `json:"id" form:"id"`
Name string `json:"name" form:"name"`
Age int `json:"age" form:"age"`
Hobby []string `json:"hobby" form:"hobby"`
}
type HelloController struct {
beego.Controller
}
func (c *HelloController) Fparam() {
var r Student = Student{}
//r.Id = c.GetString("id")
//r.Name = c.GetString("name")
//r.Age, _ = c.GetInt("age")
//r.Hobby = c.GetStrings("hobby")
c.ParseForm(&r)
// 2.初始化validation
valid := validation.Validation{}
valid.Required(r.Id, "id").Message("id不能为空")
if valid.HasErrors() {
er := ""
for _, err := range valid.Errors { // 循环打印错误
er = er + "\n" + err.Message
}
c.Ctx.WriteString(er)
return
}
fmt.Println(r)
//c.SetSession("sessionKey", "session value")
bytes, _ := json.Marshal(r)
c.Ctx.WriteString(string(bytes))
}
// 返回json格式数据
func (c *HelloController) ReturnJSON() {
var r Student = Student{
Id: "1",
Name: "zhansan",
Age: 18,
}
c.Data["json"] = r //key必须是json
c.ServeJSON()
}
/**
<?xml version="1.0" encoding="utf-8" ?>
<Student>
<Id>18</Id>
<Name>战三</Name>
<Age>18</Age>
<Hobby>1</Hobby>
<Hobby>2</Hobby>
</Student>
*/
// 在app.conf里面配置copyrequestbody=true,解析xml
func (c *HelloController) Xml() {
xmlb := c.Ctx.Input.RequestBody
xmlstr := string(xmlb)
fmt.Println(xmlstr)
s := Student{}
//json.Unmarshal(json, &s)
err := xml.Unmarshal(xmlb, &s)
if err != nil {
} else {
c.Data["json"] = s
c.ServeJSON()
}
}
// 在app.conf里面配置copyrequestbody=true,解析xml
/**
{
"id": "18",
"name": "战三",
"age": 18,
"hobby": [
"1",
"2"
]
}
*/
func (c *HelloController) Json() {
jsonb := c.Ctx.Input.RequestBody
jsonstr := string(jsonb)
fmt.Println(jsonstr)
s := Student{}
//json.Unmarshal(json, &s)
err := json.Unmarshal(jsonb, &s)
if err != nil {
} else {
c.Data["json"] = s
c.ServeJSON()
}
}
// beego.Router("/hello/:id/:name", &controllers.HelloController{}, "get:PathId")
// http://localhost:8080/hello/12/战三
func (c *HelloController) PathId() {
var id string = c.Ctx.Input.Param(":id")
var name string = c.Ctx.Input.Param(":name")
c.Ctx.WriteString("id:" + id + " name:" + name)
}
// beego.Router("/hello/cms_:id([0-9]+).html", &controllers.HelloController{}, "get:RegPathId")
// http://localhost:8080/hello/cms_12.html
func (c *HelloController) RegPathId() {
var id string = c.Ctx.Input.Param(":id")
var name string = c.Ctx.Input.Param(":name")
c.Ctx.WriteString("id:" + id + " name:" + name)
}
beego内置了session模块,目前session模块支持后端引擎包括memory,cookie,file,mysql,redis,couchbase,memcache,postgres,用户也可以根据相应的interface实现自己的引擎。
默认引擎是memory(内存)
关于 Session 模块使用中的一些参数设置:
-
beego.BConfig.WebConfig.Session.SessionOn
设置是否开启 Session,默认是 false,配置文件对应的参数名:sessionon。
-
beego.BConfig.WebConfig.Session.SessionProvider
设置 Session 的引擎,默认是 memory,目前支持还有 file、mysql、redis 等,配置文件对应的参数名:sessionprovider。
-
beego.BConfig.WebConfig.Session.SessionName
设置 cookies 的名字,Session 默认是保存在用户的浏览器 cookies 里面的,默认名是 beegosessionID,配置文件对应的参数名是:sessionname。
-
beego.BConfig.WebConfig.Session.SessionGCMaxLifetime
设置 Session 过期的时间,默认值是 3600 秒,配置文件对应的参数:sessiongcmaxlifetime。
-
beego.BConfig.WebConfig.Session.SessionProviderConfig
设置对应 file、mysql、redis 引擎的保存路径或者链接地址,默认值是空,配置文件对应的参数:sessionproviderconfig。
-
beego.BConfig.WebConfig.Session.SessionHashFunc
默认值为sha1,采用sha1加密算法生产sessionid
-
beego.BConfig.WebConfig.Session.SessionHashKey
默认的key是beegoserversessionkey,建议用户使用的时候修改该参数
-
beego.BConfig.WebConfig.Session.SessionCookieLifeTime
设置cookie的过期时间,cookie是用来存储保存在客户端的数据。
-
GetSession("kname")--获取session
SetSession("kname","kvalue")--设置session
DelSession("kname")--删除session