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应用结构
| 3 |
/controllers #app下用于存放controllers的目录 |
| 6 |
/controllerName #与controller名对应目录,其下存放模板文件 |
| 9 |
/public #静态文件,css,js,图片 |
Revel的MVC实现
Model
model就是一个普通结构体,存放属性
View
Revel的View通过 Go Templates来实现
模板存放于views目录下,命名方式是ControllerName/ActionName.html
| 1 |
{{/* app/views/Application/Register.html */}} |
| 3 |
{{template "header.html" .}} |
| 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> |
| 15 |
{{/* other fields */}} |
| 18 |
<input type="submit" value="Register"> <a href="/">Cancel</a> |
| 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 |
| 6 |
func (c Application) Register() revel.Result {//定义一个Controller的Action |
| 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) |
| 17 |
if c.Validation.HasErrors() { |
| 20 |
return c.Redirect(Application.Register) |
| 23 |
user.HashedPassword, _ = bcrypt.GenerateFromPassword( |
| 24 |
[]byte(user.Password), bcrypt.DefaultCost) |
| 25 |
err := c.Txn.Insert(&user) |
| 30 |
c.Session["user"] = user.Username //Session处理 |
| 31 |
c.Flash.Success("Welcome, " + user.Name) |
| 32 |
return c.Redirect(Hotels.Index) //从定向到另外一个Action |
Routing
在mvc中还有重要一点就是routing,Revel如何通过连接来定位Action呢,那需要Routing。
在conf下有一个routes文件用来配置,格式如下
| 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
来源:oschina
链接:https://my.oschina.net/u/111833/blog/110072