zoukankan      html  css  js  c++  java
  • Go Revel

    每个`Action`必须返回一个`revel.Result`实例,用来处理响应。它遵循了简单的接口: type Result interface { Apply(req *Request, resp *Response) } `revel.Controller`提供了一些方法来生成`Results`响应: 1、`Render`, `RenderTemplate` - 渲染模板, 传递参数 2、`RenderJson`, `RenderXml` - 将一个`struct`序列化为`json`或`xml`格式 3、`RenderText` - 返回一个纯文本响应 4、`Redirect` - 重定向到另一个`action`或URL 5、`RenderFile` - 返回一个文件, 一般作为一个附件下载 6、`RenderError` - 渲染`errors/500.html`模板来返回一个500状态 7、`NotFound` - 渲染`errors/404.html`模板来返回一个404状态 8、`Todo` - 返回一个存根响应 (500) 除此之外,开发人员还可以返回自己定义的`revel.Result` **设置状态码与返回体** 每一个内建的`Result`都有默认的状态码与返回体,如果要手动改变,只需要简单的覆盖`response`中的属性即可: func (c App) Action() revel.Result { c.Response.Status = http.StatusTeapot c.Response.ContentType = "application/dishware" return c.Render() } ##Render(渲染器) 在一个`action`内调用(如,`Controller.Action`)。`mvc.Controller.Render`可以做如下两件事: 1、将所有参数添加至controller的`RenderArgs`,并将它们的本地标识设置为key 2、渲染模板`views/Controller/Action.html`, 并将`RenderArgs`作为一个map传递 如果不成功,比如没找到模板,它会返回一个`ErrorResult`对象。 func (c MyApp) Action() revel.Result { myValue := calculateValue() return c.Render(myValue) } 上面示例将`myValue`传递至模板。 revel需要根据调用者的方法名来确定模板的路径与参数,因此`c.Render()`只能在Action中调用。 ##渲染 Json / Xml 程序可以通过传递任意Go类型来调用`RenderJson`或`RenderXml`,revel将通过`json.Marshal`或`xml.Marshal`来渲染。 如果`app.conf`中的`results.pretty=true`被定义,则将使用`MarshalIndent`进行序列化,以惨生更好的缩进供人阅读。 ##Redirect(重定向) revel提供了一下两种方式来进行重定向: 1、不传递参数来重定向至一个action return c.Redirect(Hotels.Settings) 这种方式十分有用,它提供一定程度的类型安全与独立路由(会自动的生成URL) 2、使用一个格式化字符串重定向 return c.Redirect("/hotels/%d/settings", hotelId) 这种形式必须传递参数 它会返回一个302(临时重定向)状态码 ##添加自定义Result 下面的示例演示如何创建一个自定义`Result` 创建如下类型: type Html string func (r Html) Apply(req *Request, resp *Response) { resp.WriteHeader(http.StatusOK, "text/html") resp.Out.Write([]byte(r)) } 并在action中使用: func (c *App) Action() revel.Result { return Html("Hello World") } ##状态码 没一个`Result`都具有默认的状态码,可以很方便的更改它: func (c *App) CreateEntity() revel.Result { c.Response.Status = 201 return c.Render() }
  • 相关阅读:
    hdu 2019 数列有序!
    hdu 2023 求平均成绩
    HDU 5805 NanoApe Loves Sequence (思维题) BestCoder Round #86 1002
    51nod 1264 线段相交
    Gym 100801A Alex Origami Squares (求正方形边长)
    HDU 5512 Pagodas (gcd)
    HDU 5510 Bazinga (字符串匹配)
    UVALive 7269 Snake Carpet (构造)
    UVALive 7270 Osu! Master (阅读理解题)
    UVALive 7267 Mysterious Antiques in Sackler Museum (判断长方形)
  • 原文地址:https://www.cnblogs.com/hangxin1940/p/3269146.html
Copyright © 2011-2022 走看看