课程表

Revel课程

工具箱
速查手册

Revel 相关概念

当前位置:免费教程 » 程序设计 » Revel

Revel 从Rails 和 Play! 中吸收了许多成熟的设计思想, 许多相同的思想被用到了框架的设计和接口中。

Revel 通过简单的约定来支持 MVC 设计模式,轻量、开发效率高。

MVC

  • 模型 描述基本的数据对象,特定的查询和更新逻辑。
  • 视图 一些模板,用于将数据呈现给用户。
  • 控制器 执行用户的请求,准备用户所需的数据,并指定模板进行渲染。

一些不错的MVC结构概述,像 Play! 框架 与Revel框架完全匹配。

请求的生命周期

下面是一个请求处理的基本流程:

Life of a Request

概要:

  • Revel 暴漏一个单独的 http.Handler, 负责实例化控制器 (请求的上下文),并沿着过滤器链传递请求。
  • Filters 链接到一个请求处理链,由水平相关的功能组成,比如请求记录,cookie策略,授权等。大部分内建功能都是由过滤器实现的。
  • Actions 是处理用户输入和产生请求结果的的函数。

HTTP Handler

Revel 构建自顶级 Go HTTP server, 他为每一个到来的请求创建一个 go-routine (轻量线程),用于处理并发。

Revel什么也不做,只是把请求交给过滤器链处理,完成之后,将结果写到响应中。

默认情况下, Revel 处理程序注册到 "/" 接受所有的请求连接。然而, 应用程序可以自由的重写此行为 – 例如, 可以使用现有的 http.Handlers 而不是Revel来重新实现此功能。具体请参考 FAQ

过滤器

过滤器 实现了Revel的大部分请求处理功能,过滤器有一个简单的易于嵌套的接口。

“过滤器链” 是一个函数数组, 每一个都会去执行下一个,直到最后一个过滤器执行了控制器方法。例如, 过滤器链中的第一个过滤器是 RouterFilter, 它决定哪个操作接受请求并保存到控制器。

总之, 过滤器和过滤器链就像机架一样。

控制器和方法

每一个 HTTP 请求,执行一个 action, 处理请求并写入响应。 相关的 actions 被分组到 controllers中. Controller 类型包含相关字段和方法,作为每个请求的上下文。

type Controller:

  1. type Controller struct {
  2. Name string // The controller name, e.g. "Application"
  3. Type *ControllerType // A description of the controller type.
  4. MethodName string // The method name, e.g. "Index"
  5. MethodType *MethodType // A description of the invoked action type.
  6. AppController interface{} // The controller that was instantiated.
  7. Action string // The fully qualified action name, e.g. "App.Index"
  8.  
  9. Request *Request
  10. Response *Response
  11. Result Result
  12.  
  13. Flash Flash // User cookie, cleared after 1 request.
  14. Session Session // Session, stored in cookie, signed.
  15. Params *Params // Parameters from URL and form (including multipart).
  16. Args map[string]interface{} // Per-request scratch space.
  17. RenderArgs map[string]interface{} // Args passed to the template.
  18. Validation *Validation // Data validation helpers
  19. }

作为 HTTP 请求处理的一部分,Revel 实例化你的控制器,并设置嵌入revel.Controller的所有的属性。 Revel 不在请求之间共享实例。


Controller 是直接 或 间接嵌入 *revel.Controller 的一个struct。

  1. type AppController struct {
  2. *revel.Controller
  3. }

ActionController 的方法。符合下面的条件:

  • 名称是导出的(首字母大写)
  • 返回 revel.Result 类型

例如:

  1. func (c AppController) ShowLogin(username string) revel.Result {
  2. ..
  3. return c.Render(username)
  4. }

程序调用 revel.Controller.Render 渲染一个模板, 传递给模板一个username参数。revel.Controller 有许多方法处理 revel.Result, 程序也可以自己创建处理方法。

Results

Result 符合下面的接口:

  1. type Result interface {
  2. Apply(req *Request, resp *Response)
  3. }

通常, 什么也不响应,直到 action 和所有的过滤器返回。此时,Revel写入响应的headers和cookies。(例如设置会话cookie), 然后调用 Result.Apply 写入实际响应内容。

转载本站内容时,请务必注明来自W3xue,违者必究。
 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号