精华内容
参与话题
问答
  • beego

    千次阅读 2019-01-14 16:09:32
    beego.Post("/test",controllers.Test) beego.Get("/home",func(ctx* context.Context){ ...

    最近项目用到beego,花了半天结合官方文档写了几个demo看懂了套路,对于我这个没有什么web开发经验的也很容易上手。

    1 路由

    1 restful 风格

    beego.Post("/test",controllers.Test)
    beego.Get("/home",func(ctx* context.Context){
    		ctx.Output.Body([]byte("hello beego "))
    })
    

    这种类似于c里面注册一个回调函数,http get/post method时就执行相应注册函数。

    beego.Router("/main", &controllers.MainController{})
    

    这种类似于c++里面注册一个子类,子类实现Get 、Post 、Put、Delete 接口。但是这里get请求对应Get方法,post请求对应Post方法,为了更加灵活,于是有自定义路由函数

    	beego.Router("/main", &controllers.MainController{},"get:Main")
    

    beego.Router通过第三个参数指定http method执行 控制器中相关方法。

    2 任意路由

    	beego.Any("/handler",controllers.Handler)
    

    接口:func Any(rootpath string, f FilterFunc) ,只要匹配到rootpath,不管http 什么method,都匹配 f 注册函数,更加灵活通用。

    3 自动匹配路由

    //router.go 中路由控制器注册 
    	beego.AutoRouter(&controllers.UserController{})
    
    // 控制器UserController 中方法
    func (c *UserController) Login() {
    	c.Ctx.Output.Body([]byte("login success"))
    }
    
    func (c *UserController) Logout() {
    	c.Ctx.Output.Body([]byte("logout success"))
    }
    

    对于类似 /user/login /user/logout 请求就能执行控制器中相关方法。相比restful 控制器中Get Post风格,这种路由中的url直接对应控制器中的方法更直接明了。

    4 命名空间

    	ns:=beego.NewNamespace("/api",
    		beego.NSNamespace("/user",
    			beego.NSRouter("/login",&controllers.UserController{},"*:Login"),
    			beego.NSRouter("/logout",&controllers.UserController{},"*:Logout"),
    		),
    		 beego.NSNamespace("/topic",
    		 	beego.NSBefore(controllers.Auth),
                beego.NSRouter("/create", &controllers.TopicController{}),
                beego.NSRouter("/delete", &controllers.TopicController{}),
                   
            ),
    	)
    	beego.AddNamespace(ns)
    

    命名空间可以将同一类路由置于相同空间下,比如这里第一级namespaec是api ,第二级是user和topic,
    beego.NSBefore 在访问api其他namespaec时都会先执行这里的注册函数,比如在访问其他接口前可以做一些登录认证校验。

    5 注解路由
    这种路由书写起来有些复杂,前面路由完全够用,不过是一种语法糖。

    //router.go 中包含控制器
    beego.Include(&controllers.NoteController{})
    
    //控制器
    type NoteController struct{
    	beego.Controller
    }
    func (c *NoteController) URLMapping() {
    	c.Mapping("Note", c.Note)
    }
    
    // @router /note  [get]
    func (c* NoteController)Note(){
    	c.Ctx.WriteString("note")
    }
    

    看这里注解方式 @routet + 路由(/note)+method(get) 等同
    beego.Router("/note ", &controllers.NoteController {}, “get:Note”),明显这种方式更简单。

    2 session控制

    在使用session 前 配置文件中需要设置sessionon = true,在登录接口保存session

    func (c *UserController) Login() {
    	id:=c.GetString(":id")
    	v := c.GetSession("userId")
    	if v == nil {
    		logs.Info("nil")
    		c.SetSession("userId", id)
    		c.TplName = "index.tpl"
    	} else {
    		c.Ctx.WriteString("login success")
    	}
    }
    

    于是结合前面路由beego.NSBefore(controllers.Auth),每次访问topic时都可以检测用户session是否存在,如果不存在,可以要求用户登录。

    	func Auth(ctx* context.Context){
    	val, ok := ctx.Input.Session("userId").(string)
    	logs.Info(ok,val)
    	if !ok && ctx.Request.RequestURI != "/api/user/login" {
    		logs.Info("redirect")
    		ctx.Redirect(302, "/api/user/login")
    	}
    }
    

    session默认是保存在内存中,可以配置保存到file redis mysql等。
    在配置文件中加上
    SessionProvider=file
    SessionProviderConfig =./tmp
    保存到文件,服务器重启后浏览器访问还是用之前session。

    3 表单校验

    type User struct {
    	Id     int    `valid:"Required"`
    	Name   string `valid:"Required;Match(/^Bee.*/)"` // Name 不能为空并且以 Bee 开头
    	Age    int    `valid:"Range(1, 140)"` // 1 <= Age <= 140,超出此范围即为不合法
    	Email  string `valid:"Email; MaxSize(100)"` // Email 字段需要符合邮箱格式,并且最大长度不能大于 100 个字符
    	Mobile string `valid:"Mobile"` // Mobile 必须为正确的手机号
    	IP     string `valid:"IP"` // IP 必须为一个正确的 IPv4 地址
    }
    
    // 如果你的 struct 实现了接口 validation.ValidFormer
    // 当 StructTag 中的测试都成功时,将会执行 Valid 函数进行自定义验证
    func (u *User) Valid(v *validation.Validation) {
    	if strings.Index(u.Name, "admin") != -1 {
    		// 通过 SetError 设置 Name 的错误信息,HasErrors 将会返回 true
    		v.SetError("Name", "名称里不能含有 admin")
    	}
    }
    
    func (c *UserController) Register(){
    	var user User
    	if err:=json.Unmarshal(c.Ctx.Input.RequestBody, &user);err!=nil{
    		logs.Error(" Unmarshal fail:",err)
    		return
    	}
    	valid := validation.Validation{}
    	b, err := valid.Valid(&user)
    	if err != nil {
    		logs.Error(err)
    		c.Ctx.WriteString(err.Error())
    		return
    		// handle error
    	}
    	if !b {
    		// validation does not pass
    		// blabla...
    		var msg string
    		for _, err := range valid.Errors {
    			msg+=fmt.Sprintf("%s %s %s\n",err.Key,err.Message)
    		}
    		c.Ctx.WriteString(msg)
    	}else{
    		c.Ctx.WriteString("register success")
    	}
    }
    

    这里有个注册函数,服务端需要校验数据合法性,比如是否为空,是否合邮件规则等。beego/validation模块相当方便。

    4 数据库

    自带orm不太好用,直接用go-sql-driver/mysql,原生sql写起来更得心应手。

    beego虽然模块多,掌握这几个模块就可以开始写代码了,这种web框架学习起来还是挺容易的。

    参考

    展开全文
  • Beego

    2019-04-28 14:06:54
  • BeeGo

    2017-03-26 16:51:00
    BeeGo Go web框架bee命令无效把Go和bee配置到环境后,bee new hellocd hellobee run hello只好 E:\Go\bin\bee.exe run hello浏览器http://localhost:8080/http://127.0.0.1:8080/***之前开启,结束关闭加图片成功后...
    BeeGo  Go web框架


    bee命令无效



    把Go和bee配置到环境后,bee new hello

    cd hello


    bee run hello

    只好  E:\Go\bin\bee.exe run hello


    浏览器

    http://localhost:8080/ 
    http://127.0.0.1:8080/

    ***之前开启,结束关闭

    加图片

    成功后没有返回
    指令在哪里





    转载于:https://www.cnblogs.com/xiaoCong2016/p/6623251.html

    展开全文
  • BEEGO简单企业官网后台 前台请各位根据自己的实际情况修行处理 数据库连接代码写在main.go 19行 分页行数写在conf/app.conf文件中 成功运行后请在user表中增加一个用户名和密码,密码是明文的,偷个懒,你们...
  • Beego beego is used for rapid development of RESTful APIs, web apps and backend services in Go. It is inspired by Tornado, Sinatra and Flask. beego has some Go-specific features such as interfaces ...
  • beego模型错误

    2016-08-05 16:06:50
    <p>I'm quite new on beego. I start a little project to discover and start to learn the framework. I used the bee command to create the project: <pre><code>bee new my_project </code></pre> <p>The ...
  • <p>As proposed here <a href="http://beego.me/docs/mvc/controller/config.md" rel="nofollow">...<p>I get an <code>"undefined: beego in beego.AppConfig"</code> message. Any suggestions? </div>
  • Beego和Https

    2016-09-30 11:38:49
    <p>Tried to set up https, as described here: <a href="https://github.com/astaxie/beego/issues/401" rel="nofollow">https://github.com/astaxie/beego/issues/401</a> and got this in the logs:</p> ...
  • 张长志区块链、大数据项目讲师, Java开发、10余年软件... 本课程是Go语言的中级课程Beego框架,通过几个小时的讲解,让你对Beego技术能快速用于企业实战,通过理论和实践的结合,让你能进行企业的Beego技术开发实战。
  • 尝试安装BEEGO时出错

    2016-01-25 13:31:20
    <p>I am very new with GO, and when I tried to install the framwork beego on my Windows 8 Desktop or in a VirtualBox with Debian8 I had the same error: <pre><code>sergi@odoo:~$ go get github....
  • Beego-端点测试

    2016-05-02 12:59:28
    beego.Trace("testing", "TestGet", "Code[%d] %s", w.Code, w.Body.String()) Convey("Subject: Test Station Endpoint ", t, func() { Convey("Status Code Should Be 200", func() { So(w.Code, ShouldEqual...
  • beego 的架构beego 的整体设计架构如下所示: beego 是基于八大独立的模块构建的,是一个高度解耦的框架。当初设计 beego 的时候就是考虑功能模块化,用户即使不使用 beego 的 HTTP 逻辑,也依旧可以使用这些独立...

空空如也

1 2 3 4 5 ... 20
收藏数 5,104
精华内容 2,041
关键字:

beego