boogo框架运行流程详解
1、程序运行,首先会运行main.go
package main
import (
_ "test/routers" // _ 表示运行的时候首先会调用routers中的init函数
_ "test/models"
"github.com/astaxie/beego"
)
func main() {
beego.Run()
}
main 运行时,首先看到 _ "test/routers"
,然后回去调用routers中的init函数
2、打开routers.go
package routers
import (
"test/controllers"
"github.com/astaxie/beego"
)
func init() {
beego.Router("/", &controllers.MainController{})
beego.Router("/abc", &controllers.MainController{})
}
当浏览器时,会传递给router两个参数,第一个参数是路径,第二个参数是请求方法,比如:当浏览器访问http://127.0.0.1:8080/ ,那么访问的路径为“/”,请求方法为get,然后router就会调用init函数中的 beego.Router("/", &controllers.MainController{}),然后&controllers.MainController{}运行controllers。
3、打开controllers/default.go。
package controllers
import (
"github.com/astaxie/beego"
"github.com/astaxie/beego/orm"
)
type MainController struct {
beego.Controller // 重载Controller函数
}
// 如router传递的参数为get,则调用get方法
func (c *MainController) Get() {
c.Data["Website"] = "beego.me"
c.Data["data"] = "get请求"
c.TplName = "index.tpl"
}
// 如router传递的参数为post,则调用post方法
func (c *MainController) Post() {
c.Data["Website"] = "beego.me"
c.Data["data"] = "post请求"
c.TplName = "test.html"
}
router传递 “get” 参数给 controllers, controller调用 Get()方法,渲染index.tpl 并将c.Data作为数据传递给index.tpl,并在浏览器中显示。
modles模块
modles模块用来映射数据库。
go get github.com/Go-SQL-Driver/MySQL
go install github.com/Go-SQL-Driver/MySQL
1.在modles目录下创建modle.go文件
package models
import (
"github.com/astaxie/beego/orm"
_ "github.com/Go-SQL-Driver/MySQL"
)
// 表的设计,定义表名为User,字段为Id,Name,Pwd
type User struct {
Id int
Name string
Pwd string
}
/* 多个表就定义多个struct
type Other struct {
Other string
}
*/
func init () {
// 设置数据库基本信息,
orm.RegisterDataBase("default","mysql","Rootmaster:Rootmaster@777@tcp(10.0.1.111:3307)/test?charset=utf8")
// 映射modle数据库,(new(User),new(Other))多个表的写法。
orm.RegisterModel(new(User))
// 生成表
orm.RunSyncdb("default",false,true)
}
然后mysql中要先创建表test。
2.在controllers/defaults.go文件中创建orm对象。
可以添加到get()方法中,每次刷新浏览器都会插入一条数据。
func (c *MainController) Get() {
// 1.创建orm对象
o := orm.NewOrm()
// 2.实例化
user := models.User{}
// 3.对插入结构体赋值
user.Name="steven"
user.Pwd="steven123"
// 4.插入
_,err :=o.Insert(&user)
if err != nil{
beego.Info("插入失败",err)
return
}
c.Data["Website"] = "beego.me"
c.Data["data"] = "get方法"
c.TplName = "index.tpl"
}