`
lavafree
  • 浏览: 534909 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Go语言Web框架Revel介绍

    博客分类:
  • go
阅读更多

Revel是一个go语言写的web框架,这个框架源于java的 Play! Framework.清晰的MVC结构,是现在go语言Web框架中优秀的框架。

Revel的功能有

1.热部署
Revel会自动编译你的go代码和templates模板文件,这个类似jsp功能。
2.简单的选择
Revel提供了一个工具包,用户日常的网络维护。也可以放弃这个工具包,直接访问底层应用。
3.轻量级线程
Revel建立在Go Http Server之上,使用Goroutine来处理请求。

Quick Start

安装revel之前,先安装go环境
安装还需要hg和git支持
设置GOPATH,然后把revel安装到GOPATH内
go get github.com/robfig/revel
编译revel
go build -o bin/revel github.com/robfig/revel/cmd
运行revel
bin/revel run github.com/robfig/revel/samples/chat
这里运行了一个revel的应用chat

Revel应用结构

1 appname                        #应用名称
2     /app                    #app目录
3         /controllers        #app下用于存放controllers的目录
4         /models                #存放model的目录
5         /views                #存放模板目录
6             /controllerName    #与controller名对应目录,其下存放模板文件
7             ...
8     /conf                    #应用配置目录
9     /public                    #静态文件,css,js,图片
10     /tests                    #测试代码

Revel的MVC实现

Model

model就是一个普通结构体,存放属性

View

Revel的View通过 Go Templates来实现
模板存放于views目录下,命名方式是ControllerName/ActionName.html

1 {{/* app/views/Application/Register.html */}}
2  
3 {{template "header.html" .}}
4  
5 <h1>Register:</h1>
6 <form action="/register" method="POST">
7   {{with $field := field "user.Username" .}}
8     <p class="{{$field.ErrorClass}}">
9       <strong>Username:</strong>
10       <input type="text" name="{{$field.Name}}" size="16" value="{{$field.Flash}}"> *
11       <span class="error">{{$field.Error}}</span>
12     </p>
13   {{end}}
14  
15   {{/* other fields */}}
16  
17   <p class="buttons">
18     <input type="submit" value="Register"> <a href="/">Cancel</a>
19   </p>
20 </form>
21  
22 {{template "footer.html" .}}

Controller

Controller:负责数据的绑定,验证,cookie和session的处理,业务处理及返回

1 // app/controllers/app.go
2 type Application struct {
3     *revel.Controller  //创建一个Application的Controller,每一个Controller必须依赖*revel.Controller,在go中,相当于继承了*revel.Controller
4 }
5  
6 func (c Application) Register() revel.Result {//定义一个Controller的Action
7     title := "Register"
8     return c.Render(title)
9 }
10  
11 func (c Application) SaveUser(user models.User, verifyPassword string) revel.Result {
12     c.Validation.Required(verifyPassword)//通过Controller内部工具来验证验证
13     c.Validation.Required(verifyPassword == user.Password)
14         Message("Password does not match")
15     user.Validate(c.Validation)
16  
17     if c.Validation.HasErrors() {
18         c.Validation.Keep()
19         c.FlashParams()
20         return c.Redirect(Application.Register)
21     }
22  
23     user.HashedPassword, _ = bcrypt.GenerateFromPassword(
24         []byte(user.Password), bcrypt.DefaultCost)
25     err := c.Txn.Insert(&user)
26     if err != nil {
27         panic(err)
28     }
29  
30     c.Session["user"= user.Username       //Session处理
31     c.Flash.Success("Welcome, " + user.Name)
32     return c.Redirect(Hotels.Index)         //从定向到另外一个Action
33 }

Routing

在mvc中还有重要一点就是routing,Revel如何通过连接来定位Action呢,那需要Routing。
在conf下有一个routes文件用来配置,格式如下

1 方法    请求路径                对应Action
2 GET    /login                 Application.Login      # A simple path
3 GET    /hotels/?              Hotels.Index           # Match /hotels and /hotels/ (optional trailing slash)
4 GET    /hotels/{id}           Hotels.Show            # Extract a URI argument (matching /[^/]+/)
5 POST   /hotels/{<[0-9]+>id}   Hotels.Save            # URI arg with custom regex
6 WS     /hotels/{id}/feed      Hotels.Feed            # WebSockets.
7 POST   /hotels/{id}/{action}  Hotels.{action}        # Automatically route some actions.
8 GET    /public/               staticDir:public       # Map /app/public resources under /public/...
9 *      /{controller}/{action} {controller}.{action}  # Catch all; Automatic URL generation

支持Http的方法及WobSockets
对于Revel简单介绍到这里了

 

本篇来源:http://blog.gcove.net/go%E8%AF%AD%E8%A8%80web%E6%A1%86%E6%9E%B6revel%E4%BB%8B%E7%BB%8D.html

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics