Not everything that counts can be counted and not everything that`s counted truly counts.
并不是每一件算出来的事情,都有意义,也不是每一件有意义的事情都能够被算出来。
----Albert Einstein
1 简介
2 参数配置
beego
默认会解析conf/app.conf
文件
-
系统参数
-
httpport
表示当前监听的端口 -
runmode
表示运行模式- 配置不同的标签,同一个变量在不同的标签下取不同的值
appname = WEB runmode = dev // runmode = prod // runmode = test [dev] httpport = 8080 [prod] httpport = 8088 [test] httpport = 8888
-
通过
beego.BConfig
来访问和修改系统参数的值
-
-
应用参数
-
mysql
相关配置
mysqladrr = "127.0.0.1" mysqlport = "3306" mysqluser = "root" mysqlpassword = "root"
- 通过
beego.AppConfig.String("dev::mysqluser")
进行修改和读取-
dev
表示读取哪个标签 -
mysqluse
r表示读取某个具体的参数值
-
-
3 路由配置
- 基础路由
beego.Router("/",&controller.MainController{})
beego.Router("/index",&controller.UserController{})
beego.Router("/admin",&controller.ArticleController{})
- 直接路由
beego.Get("/outpur",func(ctx *context.Context){
ctx.Output.Body([]byte("hello world"))
})
- 自定义方法及
RESTful
规则-
beego.Router
的第三个参数表示使用的httpmethod
以及对应的functionname
- 不同的
functionname
之间使用;
隔开 - 同一个
functionname
的不同的httpmethod
使用使用,
隔开,可以使用*表示所有httpmethod
-
beego.Router("/output",&PutController,"get:Creater;post:Post")
beego.Router("/getlist",&GetController,"get,post:GetList")
需要说明的是,在浏览器中访问,如无特殊说明,一般默认都是Get请求,如果访问Post方法的函数可能出现不匹配的情况,可以使用curl -b "a=1" "url"
的方式使用post访问网站
- 注解路由
4 Controller
- 要实现Controller需要匿名组合
beego.Controller
。
type xxxController struct{
beego.Controller
}
-
beego.Controller
有很多方法,包括Init
,Prepare
,Post
,Get
,Delete
,Head
等方法,也可以通过重写的方式来实现这些方法。*例如使用bee new XXX
新生成的项目中的Get方法。package controllers import "github.com/astaxie/beego" type DemoController struct{ beego.Controller } func (c *DemoController) Get(){ this.Data["Website"] = "beego.me" c.TplName = "index.tpl" }
-
this.Data
是一个用来存储输出数据的map,可以赋值任意类型的值,可以将获取到的数据赋值到this.Data
中。 -
最后
beego
会去渲染模板,this.TplName
就是需要渲染的模板。如果用户不设置该参数,程序就会默认去Controller/<方法名>.tpl
中查找。
5 models
-
注册数据库
-
注册驱动
orm.RegisterDriver("mysql",orm.DRMySQL)
-
注册数据库
orm.RegisterDataBase("default","mysql","root:root@/orm_test?charset=utf8")
-
-
操作数据库
-
指定使用的数据库
o := orm.NewOrm() o.Using("default")
-
使用提供的接口
-
ORM
以QuerySeter
来组织查询,QuerySeter
方法会返回一个新的QUerySeter
对象
o := orm.NewOrm() // 获取QuerySeter对象,user为表名 qs := o.QueryTable("user") // 也可以直接使用对象作为表名 userInfo := new(User) qs = o.Querytable(user)
-
增
var user models.User{} _ , err := o.Insert(&billRecord)
-
删
if o.Read(&user) == nil{ _ , err := o.Delete(&record) if err != nil{ //... } }
-
改
user.id = "1" user.name = "konglinghang" if o.Read(&user) == nil{ _ , err := o.Update(&user) if err != nil{ //... } }
-
查
var user User{} _ , err := o.QueryTable("user").Filter("id",user.id).Add(&user) // One(&user)
-
-
-
使用sql语句
o := NewOrm() var r RawSeter r := o.Raw("select ...")
6 View
6.1 表示数据
- 使用{{ }}在
tpl
表示数据 - .获取当前位置上下文数据
- $获取根目录上下文数据
6.2 if 和 range
type User struct{
id int
name string
}
func main(){
var user []User{}
// ...赋值
len := 1
}
{{if .user.id==1}}
{{.user.name}}
{{else }}
{{.user.id}}
{{end}}
{{rang .user.id}}
{{.user.name}} {{$.len}}
{{end}}
7 Cookie与session
7.1 Cookie的设置和获取
this.Ctx.SetCookie("name",name,maxage,"/")
this.Ctx.SetCookie("pwd",Md5([]byte(pwd)),maxage,"/")
this.Ctx.GetCookie("name")
7.2 session的设置和获取
SetSession("username", uname)
GetSession("username")
8 httplib
8.1 发送数据
url := "http://127.0.0.1:8080/hello"
rep := httplib.Get(url).Debug(true)
8.2 获取数据
beego
框架可以自动解析Get , Post等方式的请求
- 可以通过如下方式获取数据:
GetString(key string)
GetStrings(key string)[]string
GetInt(key string)(int64 , error)
GetBool(key string)(bool , error)
GetFloat(key string)(float64 , error)
- 通过
Input()
的方式获取数据
func (dc *DemoController) Post(){
id := dc.Input().Get("id")
intid , err := strconv.Atoi(id)
if err != nil{
//...
}
}
- 使用
ParseForm()
将数据直接解析到结构体中
func (dc *DemoController) Post(){
u := UserInfo{}
if err := c.ParseForm(&u) ; err != nil{
// ...
}
}
-
获取Request Body里的内容
配置文件中设置
copyrequestbody = true
, 在Controller中使用json.Unmarshal()
进行解析var ob models.Object json.Unmarshal(this.Ctx.RequestBody , &ob)
网友评论