go get github.com/astaxie/beego
go get github.com/beego/bee
最好将bin文件夹中的bin.exe加入GOPATH环境变量,全局生效;偷懒的方法是将bin.exe拷贝到须要使用的文件夹下html
在须要建立项目的src目录下使用命令:bee new project或bee api project便可自动建立一个新项目,两者都须要在$GOPATH/src目录下运行。区别在于bee api 建立的项目不会建立view目录等主要用于提供接口的项目。在新项目的根目录下使用命令:bee run便可运行,以下图所示mysql
此时可经过在浏览器访问http://localhost:8080/运行此项目,以下图所示git
app.conf文件github
#配置文件 #项目名称 appname = study #监听端口 httpport = 8080 #运行模式 runmode = dev #自动渲染,默认true #autorender = false #模板路径,默认views,能够经过如下自定义路径 #viewspath = myviews #不一样级别的配置 [dev] httpport = 8080 [test] httpport = 8081 [onl] httpport = 8082 #多个配置文件,能够经过include包含 #include "app1.conf"
main.go文件sql
package main import ( //_ 表明只想调用router.go文件下的init方法 _ "study/routers" "github.com/astaxie/beego" ) func main() { beego.Run() }
router.go文件数据库
package routers import ( "study/controllers" "github.com/astaxie/beego" ) func init() { beego.Router("/", &controllers.MainController{}) beego.Router("/login",&controllers.LoginController{}) beego.Router("/test", &controllers.LoginController{},"post:Test")//自定义方法和规则 }
default.go文件api
package controllers import ( "github.com/astaxie/beego" ) type MainController struct { beego.Controller } func (c *MainController) Get() { c.Data["Website"] = "beego.me" c.Data["Email"] = "astaxie@gmail.com" c.TplName = "index.tpl" }
login.go文件浏览器
package controllers import "github.com/astaxie/beego" type LoginController struct { beego.Controller } func (this *LoginController) Get() { this.TplName = "login.tpl" } func (c *LoginController) Test() { c.TplName = "login.tpl" }
login.tpl文件cookie
<!DOCTYPE html> <html> <head> <title>Beego</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> login </body> </html>
此时下图报错缘由是因为自定义方法中设置了只能够经过post请求才能访问session
更多相关路由设置能够参考官方文档:https://beego.me/docs/mvc/controller/router.md
package controllers import ( "github.com/astaxie/beego" ) type xxxController struct { beego.Controller } func (this *xxxController) Get() { this.Data["name"] = "zhangsan" this.Data["age"] = 16 this.TplName = "index.tpl" }
beego.Controller拥有不少方法,其中包括Init,Prepare,Post,Get,Put,Delete,Head等方法,能够经过重写的方式来实现这些方法,上面的代码就是重写了Get方法
咱们常常须要获取用户传输的数据,包括GET、POST等方式的请求,beego里面会自动解析这些数据,能够经过以下方式获取数据:
GetString(key string)string GetStrings(key string)[]string GetInt(key string)(int64,error)
GetBool(key string)(bool,error) GetFloat(key string)(float64,error)
func (this *LoginController) Input() { id := this.GetString("id") this.Ctx.WriteString("<font style = \"color:red\">" + id + "</font>") }
type User struct{ Username string Password string } func (this *LoginController) Get() { //this.TplName = "login.tpl" u := User{} if err := this.ParseForm(&u); err != nil{ //process err } this.Ctx.WriteString("Username:" + u.Username + " Password:" + u.Password) }
如何获取Request Body里的内容:
this.Ctx.SetCookie("name",name,maxage,"/");
this.Ctx.SetCookie("pwd",Md5([]byte(pwd)),maxage,"/")
this.Ctx.GetCookie("name")
this.Ctx.GetCookie("pwd")
sessionon = true
beego.BConfig.WebConfig.Session.SessionOn = true
SetSession(name string,value interface{}) GetSession(name string) interface{}
DelSession(name string) SessionRegenerateID() DestroySession()
go get github.com/astaxie/beego/orm
import ( _ "github.com/go-sql-driver/mysql" "fmt" "database/sql" )
package controllers import ( "github.com/astaxie/beego" _ "github.com/go-sql-driver/mysql" "github.com/astaxie/beego/orm" "fmt" ) type ModelController struct { beego.Controller } type UserInfo struct { Id int64 Username string Password string } func (c *ModelController) Get() { orm.Debug = true//开启调试模式 orm.RegisterDataBase("default","mysql", "root:111111@tcp(127.0.0.1:3306)/test?charset=utf8") orm.RegisterModel(new(UserInfo)) o := orm.NewOrm() user := UserInfo{Username:"zhangsan",Password:"123456"} id,err := o.Insert(&user) c.Ctx.WriteString(fmt.Sprintf("id:%d err:%v",id,err)) //更新 //user.Id = 1 //o.Update(&user) //读取 //user := UserInfo{Id:1} //o.Read(&user) //原生读取 //var maps []orm.Params //o.Raw("select * from user_info").Values(&maps) //for _,v := range maps{ // c.Ctx.WriteString(fmt.Sprintf("user info:%v",v)) //} //QueryBuilder构造查询 var users []User //获取QueryBuilder对象,须要指定数据库驱动参数 qb,_ := orm.NewQueryBuilder("mysql") //构建查询对象 qb.Select("user.name","profile.age"). From("user").InnerJoin("profile").On("user.id_user = profile.fk_user").Where("age > ?"). OrderBy("name").Desc().Limit(10).Offset(0) //导出sql语句 sql := qb.String() //执行sql or := orm.NewOrm() or.Raw(sql,20).QueryRows(&users) }
go get github.com/astaxie/beego/config
//初始化一个解析器对象 iniconf,err := NewConfig("ini","testini.conf") if err != nil{ t.Fatal(err) } iniconf.String("appname")
//ini配置文件支持section操做,key经过section::key的方式获取 [demo] key1 = "asta" key2 = "xie" 经过iniconf.String("demo::key2")获取key2值
//经过httplib获取豆瓣首页 package controllers import ( "github.com/astaxie/beego" "github.com/astaxie/beego/httplib" ) type TestHttpLibController struct { beego.Controller } func (c *TestHttpLibController) Get() { req := httplib.Get("http://www.douban.com") str,err := req.String() if err != nil{ panic(err) } //c.Ctx.WriteString("test") c.Ctx.WriteString(str) }