美文网首页
beego框架入门整理

beego框架入门整理

作者: 牧_青 | 来源:发表于2019-09-25 22:43 被阅读0次

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

1 简介

2 参数配置

beego默认会解析conf/app.conf文件

  • 系统参数

    • httpport表示当前监听的端口

    • runmode表示运行模式

      • 配置不同的标签,同一个变量在不同的标签下取不同的值
      appname = WEB
      runmode = dev
      // runmode = prod
      // runmode = test
      
      [dev]
      httpport = 8080
      [prod]
      httpport = 8088
      [test]
      httpport = 8888
      
    • 通过beego.BConfig来访问和修改系统参数的值

  • 应用参数

    • mysql相关配置
    mysqladrr = "127.0.0.1"
    mysqlport = "3306"
    mysqluser = "root"
    mysqlpassword = "root"
    
    • 通过beego.AppConfig.String("dev::mysqluser")进行修改和读取
      • dev表示读取哪个标签
      • mysqluser表示读取某个具体的参数值

3 路由配置

  • 基础路由
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规则
    • beego.Router的第三个参数表示使用的httpmethod以及对应的functionname
    • 不同的functionname之间使用;隔开
    • 同一个functionname的不同的httpmethod使用使用,隔开,可以使用*表示所有httpmethod
beego.Router("/output",&PutController,"get:Creater;post:Post")
beego.Router("/getlist",&GetController,"get,post:GetList")

需要说明的是,在浏览器中访问,如无特殊说明,一般默认都是Get请求,如果访问Post方法的函数可能出现不匹配的情况,可以使用curl -b "a=1" "url"的方式使用post访问网站

  • 注解路由

4 Controller

  • 要实现Controller需要匿名组合beego.Controller
type xxxController struct{
    beego.Controller
}
  • beego.Controller有很多方法,包括Init , Prepare,Post ,Get ,Delete ,Head等方法,也可以通过重写的方式来实现这些方法。*例如使用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是一个用来存储输出数据的map,可以赋值任意类型的值,可以将获取到的数据赋值到this.Data中。

  • 最后beego会去渲染模板,this.TplName就是需要渲染的模板。如果用户不设置该参数,程序就会默认去Controller/<方法名>.tpl中查找。

5 models

  • 注册数据库

    • 注册驱动

      orm.RegisterDriver("mysql",orm.DRMySQL)
      
    • 注册数据库

      orm.RegisterDataBase("default","mysql","root:root@/orm_test?charset=utf8")
      
  • 操作数据库

    • 指定使用的数据库

      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 表示数据

  • 使用{{ }}在tpl表示数据
  • .获取当前位置上下文数据
  • $获取根目录上下文数据

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的设置和获取

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

7.2 session的设置和获取

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

8 httplib

8.1 发送数据

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

8.2 获取数据

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

  • 可以通过如下方式获取数据:
GetString(key string)
GetStrings(key string)[]string
GetInt(key string)(int64 , error)
GetBool(key string)(bool , error)
GetFloat(key string)(float64 , error)
  • 通过Input()的方式获取数据
func (dc *DemoController) Post(){
    id := dc.Input().Get("id")
    intid , err := strconv.Atoi(id)
    if err != nil{
        //...
    }
}
  • 使用ParseForm()将数据直接解析到结构体中
func (dc *DemoController) Post(){
    u := UserInfo{}
    if err := c.ParseForm(&u) ; err != nil{
        // ...
    }
}
  • 获取Request Body里的内容

    配置文件中设置 copyrequestbody = true , 在Controller中使用json.Unmarshal()进行解析

    var ob models.Object
    json.Unmarshal(this.Ctx.RequestBody , &ob)
    

相关文章

网友评论

      本文标题:beego框架入门整理

      本文链接:https://www.haomeiwen.com/subject/bdeuuctx.html