beego是一个使用 Golang 来设计的快速构建并开发 Go 应用程序的开源http框架,可以快速开发API、Web、后端服务等各种应用,功能支持RESTFul,MVC模型;含有智能路由,内置强大模块,采用了 Go 原生的 http 包来处理请求;goroutine 的并发效率足以应付大流量的 Web 应用和 API 应用等等,简单易用,功能强大。
beego已经为用户建立了诸如routers(路由),views(视图),controller(控制器),models(数据模型),static(静态文件),tests(测试用例)等文件夹和相应的.go文件了。Modoel,views和controller,依然是构建MVC模式的核心。
程序入口 :main.go
路由routers :路由的主要功能是实现从请求地址到实现方法,通过实行路由注册,我们把请求分发到指定的控制器来执行相应的逻辑。
控制器controllers :根据路由分发的用户请求, controller会进行业务逻辑处理并返回响应信息。
本文主要介绍beego框架获取http请求的一些介绍及注意事项。
获取参数
经常需要获取用户传递的数据,包括 Get、POST 等方式的请求,beego 里面会自动解析这些数据,你可以通过如下方式获取数据:
- GetString(key string) string
- GetStrings(key string) []string
- GetInt(key string) (int64, error)
- GetBool(key string) (bool, error)
- 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 {
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, _ := 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 {
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
如有不对欢迎指正,相互学习,共同进步。