beego框架新人指南
beego 是一个快速开发 Go 应用的 HTTP 框架,他可以用来快速开发 API、Web 及后端服务等各种应用,是一个 MVC 的框架,主要设计灵感来源于 tornado、sinatra 和 flask 这三个框架,但是结合了 Go 本身的一些特性(interface、struct 嵌入等)而设计的一个框架。
M: Model,模型,数据库操作,增删改查
V: View,视图, 接收C传输的数据,组织html界面
C: Controller,控制器, 接收数据,数据处理,传输数据给M和V并接收应答,返回应答给浏览器
安装
安装方法查看官网
bee new quickstart来创建一个项目,注意:通过bee创建的项目代码都是在$GOPATH/src目录下面。
bee new quickstart bee run
项目结构分析
├── conf
│ └── app.conf
├── controllers
│ ├── admin
│ └── default.go
├── main.go
├── models
│ └── models.go
├── static
│ ├── css
│ ├── ico
│ ├── img
│ └── js
└── views
├── admin
└── index.tpl
路由设置
main.go
package main import ( _ "quickstart/routers" "github.com/astaxie/beego" ) func main() { beego.Run() }
这时候我们就发现了main里面导入了”quickstart/routers”,并且执行了这个包里面的init函数,routers包的内容如下:
package routers import ( "beego/controllers" "github.com/astaxie/beego" ) func init() { beego.Router("/", &controllers.MainController{}) //注意:当实现了自定义的请求方法,请求将不会访问默认方法 //beego.Router("/login", &controllers.MainController{},"get:ShowLogin;post:HandleLogin") beego.Router("/index",&controllers.MainController{},"get:ShowIndex") beego.Router("/register", &controllers.MainController{}) beego.Router("/login", &controllers.MainController{}, "get:ShowLogin;post:HandleLogin") }
ORM
beego中内嵌了ORM框架,ORM框架可以将结构体和数据表进行对应起来,只需要通过结构体和对象就可以对数据表进行操作。
设计类:模型类。
ORM另外一个作用:根据设计的类生成数据库中的表。
安装ORM
go get github.com/astaxie/beego/orm go get -u github.com/go-sql-driver/mysql
model.go
package models import ( "github.com/astaxie/beego/orm" _ "github.com/go-sql-driver/mysql" ) //表的设计 type User struct { Id int Name string Pwd string } func init(){ // 设置数据库基本信息 orm.RegisterDataBase("default", "mysql", "root:123456@tcp(127.0.0.1:3306)/beego?charset=utf8") // 映射model数据 orm.RegisterModel(new(User)) // 生成表 orm.RunSyncdb("default", false, true) }
ORM对数据进行操作
在main.go中导入
import (
_ "beego/routers"
_ "beego/models"
"github.com/astaxie/beego"
)
在Controller中导入
import ( "beego/models" "fmt" "github.com/astaxie/beego" "github.com/astaxie/beego/orm" )
插入
o := orm.NewOrm() var user User user.Name = "slene" user.Pwd= true id, err := o.Insert(&user) if err == nil { fmt.Println(id) }
查询
o := orm.NewOrm() user := User{Id: 1} err := o.Read(&user) 也可以指定字段查询 user := User{Name: "slene"} err = o.Read(&user, "Name") ...
更新
o := orm.NewOrm() user := User{Id: 1} if o.Read(&user) == nil { user.Name = "MyName" if num, err := o.Update(&user); err == nil { fmt.Println(num) } }
也可以指定更新的字段
// 只更新 Name o.Update(&user, "Name") // 指定多个字段 // o.Update(&user, "Field1", "Field2", ...) ...
删除
o := orm.NewOrm() if num, err := o.Delete(&User{Id: 1}); err == nil { fmt.Println(num) }
跳转
c.Data["errmsg"] = "sda" c.TplName = "login.html" 指定视图文件,同时可以给这个视图传递一些数据 能传递数据 c.Redirect("/login",302) 跳转。不能传递数据。速度快 Redirect("/login",302) 第一个参数是URL地址 第二个参数是HTTP的状态码 1xx 请求已经被接收,需要继续发送请求 100 2xx 请求成功 200 3xx 请求资源被转移,请求被转接 302 4xx 请求失败 404 5xx 服务器错误 500