beego框架入門整理

Not everything that counts can be counted and not everything that`s counted truly counts.
并不是每一件算出來的事情,都有意義,也不是每一件有意義的事情都能夠被算出來脸候。
----Albert Einstein

1 簡介

2 參數(shù)配置

beego默認(rèn)會解析conf/app.conf文件

  • 系統(tǒng)參數(shù)

    • httpport表示當(dāng)前監(jiān)聽的端口

    • runmode表示運行模式

      • 配置不同的標(biāo)簽,同一個變量在不同的標(biāo)簽下取不同的值
      appname = WEB
      runmode = dev
      // runmode = prod
      // runmode = test
      
      [dev]
      httpport = 8080
      [prod]
      httpport = 8088
      [test]
      httpport = 8888
      
    • 通過beego.BConfig來訪問和修改系統(tǒng)參數(shù)的值

  • 應(yīng)用參數(shù)

    • mysql相關(guān)配置
    mysqladrr = "127.0.0.1"
    mysqlport = "3306"
    mysqluser = "root"
    mysqlpassword = "root"
    
    • 通過beego.AppConfig.String("dev::mysqluser")進(jìn)行修改和讀取
      • dev表示讀取哪個標(biāo)簽
      • mysqluser表示讀取某個具體的參數(shù)值

3 路由配置

  • 基礎(chǔ)路由
beego.Router("/",&controller.MainController{})
beego.Router("/index",&controller.UserController{})
beego.Router("/admin",&controller.ArticleController{})
  • 直接路由
beego.Get("/outpur",func(ctx *context.Context){
    ctx.Output.Body([]byte("hello world"))
})
  • 自定義方法及RESTful規(guī)則
    • beego.Router的第三個參數(shù)表示使用的httpmethod以及對應(yīng)的functionname
    • 不同的functionname之間使用;隔開
    • 同一個functionname的不同的httpmethod使用使用,隔開寒矿,可以使用*表示所有httpmethod
beego.Router("/output",&PutController,"get:Creater;post:Post")
beego.Router("/getlist",&GetController,"get,post:GetList")

需要說明的是炒考,在瀏覽器中訪問,如無特殊說明熔酷,一般默認(rèn)都是Get請求秽之,如果訪問Post方法的函數(shù)可能出現(xiàn)不匹配的情況当娱,可以使用curl -b "a=1" "url"的方式使用post訪問網(wǎng)站

  • 注解路由

4 Controller

  • 要實現(xiàn)Controller需要匿名組合beego.Controller
type xxxController struct{
    beego.Controller
}
  • beego.Controller有很多方法考榨,包括Init , Prepare,Post ,Get ,Delete ,Head等方法跨细,也可以通過重寫的方式來實現(xiàn)這些方法。*例如使用bee new XXX新生成的項目中的Get方法河质。

    package controllers
    
    import "github.com/astaxie/beego"
    
    type DemoController struct{
        beego.Controller
    }
    
    func (c *DemoController) Get(){
      this.Data["Website"] = "beego.me"
        c.TplName = "index.tpl"
    }
    
  • this.Data是一個用來存儲輸出數(shù)據(jù)的map冀惭,可以賦值任意類型的值,可以將獲取到的數(shù)據(jù)賦值到this.Data中掀鹅。

  • 最后beego會去渲染模板散休,this.TplName就是需要渲染的模板。如果用戶不設(shè)置該參數(shù)乐尊,程序就會默認(rèn)去Controller/<方法名>.tpl中查找戚丸。

5 models

  • 注冊數(shù)據(jù)庫

    • 注冊驅(qū)動

      orm.RegisterDriver("mysql",orm.DRMySQL)
      
    • 注冊數(shù)據(jù)庫

      orm.RegisterDataBase("default","mysql","root:root@/orm_test?charset=utf8")
      
  • 操作數(shù)據(jù)庫

    • 指定使用的數(shù)據(jù)庫

      o := orm.NewOrm()
      o.Using("default")
      
    • 使用提供的接口

      • ORMQuerySeter來組織查詢,QuerySeter方法會返回一個新的QUerySeter對象
      o := orm.NewOrm()
      // 獲取QuerySeter對象扔嵌,user為表名
      qs := o.QueryTable("user")
      
      // 也可以直接使用對象作為表名
      userInfo := new(User)
      qs = o.Querytable(user)
      
      • var user models.User{}
        _ , err := o.Insert(&billRecord)
        
      • if o.Read(&user) == nil{
            _ , err := o.Delete(&record)
            if err != nil{
                //...
            }
        }
        
      • user.id = "1"
        user.name = "konglinghang"
        if o.Read(&user) == nil{
            _ , err := o.Update(&user)
            if err != nil{
                //...
            }
        }
        
      • var user User{}
        _ , err := o.QueryTable("user").Filter("id",user.id).Add(&user)
        // One(&user)
        
  • 使用sql語句

    o := NewOrm()
    var r RawSeter
    r := o.Raw("select ...")
    

6 View

6.1 表示數(shù)據(jù)

  • 使用{{ }}在tpl表示數(shù)據(jù)
  • .獲取當(dāng)前位置上下文數(shù)據(jù)
  • $獲取根目錄上下文數(shù)據(jù)

6.2 if 和 range

type User struct{
    id int 
    name string
}

func main(){ 
    var user []User{}
    // ...賦值
    len := 1
}

{{if .user.id==1}}
    {{.user.name}}
{{else }}
    {{.user.id}}
{{end}}

{{rang .user.id}}
    {{.user.name}} {{$.len}}
{{end}}

7 Cookie與session

7.1 Cookie的設(shè)置和獲取

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

7.2 session的設(shè)置和獲取

SetSession("username", uname)
GetSession("username")

8 httplib

8.1 發(fā)送數(shù)據(jù)

url := "http://127.0.0.1:8080/hello"
rep := httplib.Get(url).Debug(true)

8.2 獲取數(shù)據(jù)

beego框架可以自動解析Get , Post等方式的請求

  • 可以通過如下方式獲取數(shù)據(jù):
GetString(key string)
GetStrings(key string)[]string
GetInt(key string)(int64 , error)
GetBool(key string)(bool , error)
GetFloat(key string)(float64 , error)
  • 通過Input()的方式獲取數(shù)據(jù)
func (dc *DemoController) Post(){
    id := dc.Input().Get("id")
    intid , err := strconv.Atoi(id)
    if err != nil{
        //...
    }
}
  • 使用ParseForm()將數(shù)據(jù)直接解析到結(jié)構(gòu)體中
func (dc *DemoController) Post(){
    u := UserInfo{}
    if err := c.ParseForm(&u) ; err != nil{
        // ...
    }
}
  • 獲取Request Body里的內(nèi)容

    配置文件中設(shè)置 copyrequestbody = true , 在Controller中使用json.Unmarshal()進(jìn)行解析

    var ob models.Object
    json.Unmarshal(this.Ctx.RequestBody , &ob)
    
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末限府,一起剝皮案震驚了整個濱河市夺颤,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌胁勺,老刑警劉巖世澜,帶你破解...
    沈念sama閱讀 212,599評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異署穗,居然都是意外死亡寥裂,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,629評論 3 385
  • 文/潘曉璐 我一進(jìn)店門案疲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來抚恒,“玉大人,你說我怎么就攤上這事络拌。” “怎么了回溺?”我有些...
    開封第一講書人閱讀 158,084評論 0 348
  • 文/不壞的土叔 我叫張陵春贸,是天一觀的道長。 經(jīng)常有香客問我遗遵,道長萍恕,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,708評論 1 284
  • 正文 為了忘掉前任车要,我火速辦了婚禮允粤,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘翼岁。我一直安慰自己类垫,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,813評論 6 386
  • 文/花漫 我一把揭開白布琅坡。 她就那樣靜靜地躺著悉患,像睡著了一般。 火紅的嫁衣襯著肌膚如雪榆俺。 梳的紋絲不亂的頭發(fā)上售躁,一...
    開封第一講書人閱讀 50,021評論 1 291
  • 那天,我揣著相機與錄音茴晋,去河邊找鬼陪捷。 笑死,一個胖子當(dāng)著我的面吹牛诺擅,可吹牛的內(nèi)容都是我干的市袖。 我是一名探鬼主播,決...
    沈念sama閱讀 39,120評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼烁涌,長吁一口氣:“原來是場噩夢啊……” “哼凌盯!你這毒婦竟也來了付枫?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,866評論 0 268
  • 序言:老撾萬榮一對情侶失蹤驰怎,失蹤者是張志新(化名)和其女友劉穎阐滩,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體县忌,經(jīng)...
    沈念sama閱讀 44,308評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡掂榔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,633評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了症杏。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片装获。...
    茶點故事閱讀 38,768評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖厉颤,靈堂內(nèi)的尸體忽然破棺而出穴豫,到底是詐尸還是另有隱情,我是刑警寧澤逼友,帶...
    沈念sama閱讀 34,461評論 4 333
  • 正文 年R本政府宣布精肃,位于F島的核電站,受9級特大地震影響帜乞,放射性物質(zhì)發(fā)生泄漏司抱。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,094評論 3 317
  • 文/蒙蒙 一黎烈、第九天 我趴在偏房一處隱蔽的房頂上張望习柠。 院中可真熱鬧,春花似錦照棋、人聲如沸资溃。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,850評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽肉拓。三九已至,卻和暖如春梳庆,著一層夾襖步出監(jiān)牢的瞬間暖途,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,082評論 1 267
  • 我被黑心中介騙來泰國打工膏执, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留驻售,地道東北人。 一個月前我還...
    沈念sama閱讀 46,571評論 2 362
  • 正文 我出身青樓更米,卻偏偏與公主長得像欺栗,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,666評論 2 350

推薦閱讀更多精彩內(nèi)容