美文网首页
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