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