Beego中前后端数据是如何实现交互的,Get|Struct|JSON / Request Body, 一个例子醍醐灌顶

1、get方式获取参数

Get、POST 等方式的请求,beego 里面会自动解析这些数据。

比如一个登陆页面的实现

前端我们是Post,用户名和密码

<form  class="login_form"  name = "login"method = "post" action="/article/user">
     <h1 class="login_title">用户登录</h1>
        <input type="text"  class="input_txt" name = "username">
        <input type="password" class="input_txt" name = "password">
        <input type="submit" value="登 录" class="input_sub">
</form>

后端,我们使用下面这个方法来获取这些数据

  • GetString(key string) string
  • GetStrings(key string) []string
  • GetInt(key string) (int64, error)
  • GetBool(key string) (bool, error)
  • GetFloat(key string) (float64, error)

2、解析到Struct

就是将表单里面的内容直接解析到一个struct中,完成数据的POST

这里,我们使用相同的前端页面

后端,我们需要新建一个struct去接收前端的数据。

user:= struct {
		Id      int  `form:"-"`
		Name    string  `form:"username"`
		Pwd     string `form:"password"`
	}{}
  • 定义 struct 时,字段名后如果有 form 这个 tag,则会以把 form 表单里的 name 和 tag 的名称一样的字段赋值给这个字段,否则就会把 form 表单里与字段名一样的表单内容赋值给这个字段。如上面例子中,会把表单中的 username 和 age 分别赋值给 user 里的 Name 和 Age 字段。
  • 调用 Controller ParseForm 这个方法的时候,传入的参数必须为一个 struct 的指针,否则对 struct 的赋值不会成功并返回 xx must be a struct pointer 的错误。
  • 如果要忽略一个字段,有两种办法,一是:字段名小写开头,二是:form 标签的值设置为 -

Controller中解析:

func (c *MainController) Post() {
    u := user{}
    if err := c.ParseForm(&u); err != nil {
        //handle error
    }
}

3、获取JSON / Request Body 里的内容

在企业中,我们用的更多的是API开发,而API中的数据经常会用到 JSONXML 来作为数据交互的格式。这是如何实现的交互,我们来感受一下。

  •     在配置文件里设置 copyrequestbody = true
  •     在 Controller 中
  •     json 用来解析JSON的包
  •     ob定义的struct
func (this *ObjectController) Post() {
    var ob models.Object
    json.Unmarshal(this.Ctx.Input.RequestBody, &ob)
    objectid := models.AddOne(ob)
    this.Data["json"] = "{\"ObjectId\":\"" + objectid + "\"}"
    this.ServeJSON()
}

例如获取一个数据表的json值

获取结果如下图

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值