Beego获取http请求内容详细介绍

       beego是一个使用 Golang 来设计的快速构建并开发 Go 应用程序的开源http框架,可以快速开发API、Web、后端服务等各种应用,功能支持RESTFul,MVC模型;含有智能路由,内置强大模块,采用了 Go 原生的 http 包来处理请求;goroutine 的并发效率足以应付大流量的 Web 应用和 API 应用等等,简单易用,功能强大。

       本文主要介绍beego框架获取http请求的一些介绍及注意事项。

获取参数


        经常需要获取用户传递的数据,包括 Get、POST 等方式的请求,beego 里面会自动解析这些数据,你可以通过如下方式获取数据:

  1. GetString(key string) string
  2. GetStrings(key string) []string
  3. GetInt(key string) (int64, error)
  4. GetBool(key string) (bool, error)
  5. GetFloat(key string) (float64, error)

使用用户信息验证例子分别采用Get、Post方法举例如下:

在models中定义返回结构,其中code 含义 1 成功 0 失败

type GeneralResp struct {
   Code  int         `json:"code"`
   Data  interface{} `json:"data"`
   Error string      `json:"error"`
}

使用Get方法实现用户信息验证接口

func (this *MainController) Login() {
    userName := this.GetString("username")
    passWord := this.GetString("password")
    ret := tools.LoginMsgCheck(userName,passWord)//登录信息验证
    if ret == true {
        this.Data["json"] = models.GeneralResp{Code: 1}     
    }else{
        this.Data["json"] = models.GeneralResp{Code: 0, Error: err.Error()}
    }
    this.ServeJSON()
}

如果你需要的数据可能是其他类型的,例如是 int 类型而不是 int64,那么你需要这样处理:

func (this *MainController) Get() {
    id := this.Input().Get("id")
    intid, err := strconv.Atoi(id)
}

再使用Post方法完成用户信息验证接口

在models中定义UserInfo结构

type UserInfo struct {
    UserName   string `json:"username"`
    Password   string `json:"password"`
}

Post方法实现用户信息验证接口

func (this *MainController) Login(){
    var userInfo models.UserInfo
    err := json.Unmarshal(this.Ctx.Input.RequestBody, &userInfo )
    if err != nil {
	this.Data["json"] = models.GeneralResp{Code: 0, Error: err.Error()}
	this.ServeJSON()
	return
    }
    ret := tools.LoginMsgCheck(userInfo.UserName,userInfo.PassWord)//登录信息验证
    if ret == true {
        this.Data["json"] = models.GeneralResp{Code: 1}     
    }else{
        this.Data["json"] = models.GeneralResp{Code: 0, Error: err.Error()}
    }
    this.ServeJSON()
}

更多其他的 request 的信息,用户可以通过 this.Ctx.Request 获取信息,关于该对象的属性和方法参考手册Request。

获取 Request Body 里的内容


在 API 的开发中,经常会用到 JSON 或 XML 来作为数据交互的格式,如何在 beego 中获取 Request Body 里的 JSON 或 XML 的数据呢?

1、在配置文件里设置 copyrequestbody = true
2、在 Controller 中

func (this *ObejctController) Post() {
    var ob models.Object
    json.Unmarshal(this.Ctx.Input.RequestBody, &ob)
    objectid := models.AddOne(ob)
    this.Data["json"] = "{\"ObjectId\":\"" + objectid + "\"}"
    this.ServeJson()
}

注意事项

配置文件中一定要加copyrequestbody = true

否则会打印错误信息:SyntaxError: Unexpected end of JSON input

如有不对欢迎指正,相互学习,共同进步。

猜你喜欢

转载自blog.csdn.net/wade3015/article/details/85054058