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)
}
相关文章
相关标签/搜索