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