go學習之Beego框架

1、下載安裝框架

go get github.com/astaxie/beego

2、下載安裝bee工具

go get github.com/beego/bee

    最好將bin文件夾中的bin.exe加入GOPATH環境變量,全局生效;偷懶的方法是將bin.exe拷貝到須要使用的文件夾下html

3、bee工具的使用

   在須要建立項目的src目錄下使用命令:bee new project或bee api project便可自動建立一個新項目,兩者都須要在$GOPATH/src目錄下運行。區別在於bee api 建立的項目不會建立view目錄等主要用於提供接口的項目。在新項目的根目錄下使用命令:bee run便可運行,以下圖所示mysql

此時可經過在瀏覽器訪問http://localhost:8080/運行此項目,以下圖所示git

4、參數和路由配置

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

5、beego之Controller

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方法

6、beego之請求數據處理

    咱們常常須要獲取用戶傳輸的數據,包括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裏的內容:

        

7、Beego框架之cookie與session

    一、cookie

        (1)設置cookie

                this.Ctx.SetCookie("name",name,maxage,"/");

                this.Ctx.SetCookie("pwd",Md5([]byte(pwd)),maxage,"/")

        (2)獲取cookie

                this.Ctx.GetCookie("name")

                this.Ctx.GetCookie("pwd")

    二、session

        (1)開啓session

                ①經過app.conf配置文件

                        sessionon = true

                ②在main入口函數

                        beego.BConfig.WebConfig.Session.SessionOn = true

        (2)session方法

                SetSession(name string,value interface{})        GetSession(name string) interface{}

                DelSession(name string)        SessionRegenerateID()        DestroySession()

8、Beego框架之model

    一、安裝orm

go get github.com/astaxie/beego/orm

    二、數據庫設置(將須要使用的driver加入import)

import (
   _ "github.com/go-sql-driver/mysql"
   "fmt"
   "database/sql"
)

    三、orm使用

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)
}

9、配置文件解析

    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值

10、httplib

//經過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)
}
相關文章
相關標籤/搜索