概述
beego是一个快速开发go应用的http框架,他可用来快速开发API、Web以及后端服务等各种应用。
beego的架构
cache 缓存模块
config 配置模块
context 上下文模块
logs 日志模块
orm 和数据库相关的操作
session
httplib 和网络相关的模块
beego执行逻辑
页面(V)----------控制(C)-----------数据库操作(M)
beego项目目录
conf 配置文件
controllers 控制层
main.go 主入口
models 里面放的是和数据库有关的
static 放的是静态文件(html css .js)
views 页面展示
beego的命令
new:基于网站开发(要在gopath环境下)
api:基于手机接口开发
run:运行(项目目录下)
eg.
bee new project-name
bee api api-name
bee run
beego参数配置
系统配置:
appname=project-name
httpport=端口
runmode=dev(开发环境)/prod(正式环境)/test
通过beego.Appname="beepkg"进行修改
应用配置:
mysqluser=" "
mysqlpass=" "
mysqlurl=" "
mysqldb=" "
beego.AppConfig.String(" ")//获取对应的值
beego动态选择:
runmode=dev
【dev】
httpport=8080
【prod】
httpport=8081
【test】
httpport=8082
beego路由操作
固定路由
beego.Router("/", &controllers.MainController{})
基础路由
自定义路由
beego.Router("/", &controllers.MainController{},“get:Get,post:Post”)//get请求调用Get,Post请求调用Post
beego控制器
beego的controller设计
type ***Controller struct{
beego.Controller
}
beego处理get方法
GetString(key string)string
GetStrings(key string)[]string
GetInt(key string)(int64,error)
GetBool(key string)(bool,error)
GetFloat(key string)(float64,error)
服务器端概念:
Request: 用户请求的信息,用来解析用户请求,包括get、post、cookie、url等信息。
Response:服务器需要反馈给客户端的信息
Conn:用户的每次请求链接
Handler:处理请求和生成返回信息的处理逻辑
beego处理post请求
c.ParseForm(&u)
注:表单里的名字需要和结构体的名字一样才可以获取到信息
//若名字不一样时通过如下方法进行解析
eg:
type u struct{
Id int `form:"-"` //"-"不解析
Name string `form:"username"` //解析username
}
beego ORM数据库
安装:go get github.com/astaxie/beego/orm
//----------------------------------------------链接数据库(func init())----------------------------------------------------------
//注册
orm.RegisterDataBase(“default”,“mysql”,“username:password@tcp(127.0.0.1:3306)/db_name?charset=utf8”)
//创建表
type Task struct{}
orm.RegisterModel(new(Task), new(TaskNumber))
//------------------------------------------------------将数据库信息写入到配置文件(func init())---------------------------------------------------------------
eg.https://www.golangtc.com/t/53006c35320b526197000037
dbHost := beego.AppConfig.String(“DBHost”)
dbPort := beego.AppConfig.String(“DBPort”)
dbUser := beego.AppConfig.String(“DBUser”)
dbPass :=beego.AppConfig.String(“DBPass”)
dbName :=beego.AppConfig.String(“DBName”)
dbDSN:=fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8",dbUser,dbPass,dbHost,dbPort,dbName)
orm.RegisterDriver(“mysql”, orm.DR_MySQL);//可以去掉
orm.RegisterDataBase(“default”,“mysql”,dbDSN)
orm.RegisterModel(new(User))
//------------------------------------------------------------插入数据--------------------------------------------------------------------
//orm对象
o:=orm.NewOrm()
// 默认使用 default,你可以指定为其他数据库
o.Using(“default”)
//数据
user:=User{}
//插入
id,_:=o.Insert(&user)
//--------------------------------------------------------------------更新数据------------------------------------------------------------------------
//orm对象
o:=orm.NewOrm()
//数据
user:=User{Id=" "}
o.Update(&user)
//------------------------------------------------------------------读取--------------------------------------------------------------------------------
//orm对象
o:=orm.NewOrm()
//数据
user:=User{Id=" "}
o.Read(&user)
//-------------------------------------------------------------读取所有-----------------------------------------------------------------------------------------
o := orm.NewOrm()
o.Using(“default”)
var tasks []*models.Task
o.QueryTable(“task”).All(&tasks)
//或者
db:=orm.NewOrm()
var tasks []*models.Task
qb,_:=orm.NewQueryBuilder(“mysql”)
qb.Select("*").From(“task”)
sql:=qb.String()
db.Raw(sql).QueryRows(tasks)
beego获取http返回json
func (this *TaskController) Put() {
//var m map[string]interface{} //声明变量,不分配内存
//m = make(map[string]interface{}) //必可不少,分配内存
//interface转其他类型
form := make(map[string]interface{})
//把 JSON 转换回对象的方法(函数)为 json.Unmarshal()
//****this.Ctx.Input.RequestBody获取http请求内容
if err := json.Unmarshal(this.Ctx.Input.RequestBody, &form); err != nil {
//将类型转换为json
this.Data[“json”] = map[string]interface{}{“err”: “invalid params”}
} else {
task := models.Task{Id: int(form[“Id”].(float64))}
o := orm.NewOrm()
//查询Id的语句,进行更新
if o.Read(&task) == nil {
task.Name = form[“Name”].(string)
task.Min = int(form[“Min”].(float64))
task.Max = int(form[“Max”].(float64))
task.Interval = int(form[“Interval”].(float64))
if _, err := o.Update(&task); err != nil {
this.Data[“json”] = map[string]interface{}{“err”: “update error”}
} else {
this.Data[“json”] = map[string]interface{}{“data”: “update success”}
utils.NotifyChan(&task, 2)
}
} else {
this.Data[“json”] = map[string]interface{}{“err”: “task not exists”}
}
}
this.ServeJSON()
}
返回Json
type User struct {
Id int
Name string
sex string
}
me := User{Id: 12, Name: "李晓华",sex: "女"}
//json返回
this.Data["json"] = &me
this.ServeJSON()
来源:https://segmentfault.com/q/1010000017220538/a-1020000017225006
实战
//创建Controller
//创建路由
//创建Model
来源:CSDN
作者:weixin_42282999
链接:https://blog.csdn.net/weixin_42282999/article/details/104512061