99re热这里只有精品视频,7777色鬼xxxx欧美色妇,国产成人精品一区二三区在线观看,内射爽无广熟女亚洲,精品人妻av一区二区三区

Revel Results

2022-07-28 14:11 更新

控制器方法必須返回一個(gè)revel.Result, 用來(lái)處理響應(yīng)結(jié)果,其接口定義如下:

type Result interface {
    Apply(req *Request, resp *Response)
}

revel.Controller 使用以下方法來(lái)處理響應(yīng)結(jié)果:

  • Render, RenderTemplate - 渲染模板, 傳送參數(shù).
  • RenderJson, RenderXml - 序列化結(jié)構(gòu)體到 json 或 xml.
  • RenderText - 返回一個(gè)明文響應(yīng).
  • Redirect - 重定向到一個(gè)控制器方法 或 URL
  • RenderFile - 返回一個(gè)文件, 一般用于響應(yīng)文件下載.
  • RenderError - 渲染 errors/500.html 模板來(lái)返回一個(gè) 500 錯(cuò)誤.
  • NotFound - 渲染 errors/404.html 模板來(lái)返回一個(gè) 404 錯(cuò)誤.
  • Todo - 返回一個(gè)存根響應(yīng)(500)

此外,開發(fā)者可以自定義revel.Result.

設(shè)置狀態(tài)碼/內(nèi)容類型

每個(gè)內(nèi)建的 Result 都有一個(gè)默認(rèn)的狀態(tài)碼和內(nèi)容類型,簡(jiǎn)單的設(shè)置相關(guān)屬性就可以修改這些默認(rèn)值:

func (c App) Action() revel.Result {
    c.Response.Status = http.StatusTeapot
    c.Response.ContentType = "application/dishware"
    return c.Render()
}

渲染

控制器渲染方法 (e.g. “Controller.Action”), mvc.Controller.Render 做了兩件事:

  1. 添加參數(shù)到控制器的 RenderArgs 中, 使用變量的名字作為字典的key.
  2. 使用傳送的參數(shù)渲染模板 “views/Controller/Action.html”。

如果不成功 (比如,沒(méi)有找到模板), 將返回 ErrorResult.

這允許開發(fā)人員編寫:

func (c MyApp) Action() revel.Result {
    myValue := calculateValue()
    return c.Render(myValue)
}

在模板中引用變量 “myValue”。這通常比構(gòu)建一個(gè)明確的map更方便,因?yàn)樵谠S多情況下,數(shù)據(jù)將被作為局部變量處理。

注意: Revel 通過(guò)調(diào)用的控制器方法名來(lái)確定使用哪個(gè)模板,查找參數(shù)名。因此, c.Render() 只可稱為由操作。

RenderJson / RenderXml

應(yīng)用程序可以調(diào)用 RenderJson 或 RenderXml 并傳送任意類型的變量 (通常是一個(gè) struct). Revel 會(huì)使用 json.Marshal orxml.Marshal對(duì)變量進(jìn)行序列化操作.

如果 app.conf 配置文件中 results.pretty=true, 將使用 MarshalIndent 進(jìn)行序列化, 生成漂亮的縮進(jìn),方便使用。

重定向

一個(gè)輔助函數(shù)是用于生成重定向。它有兩種方式使用:

  1. 重定向到一個(gè)控制器方法(不帶參數(shù)):
    return c.Redirect(Hotels.Settings)

這種形式是非常有用的,因?yàn)樗峁┝艘欢ǔ潭鹊穆酚深愋桶踩院酮?dú)立性(自動(dòng)生成URL)。

  1. 重定向到一個(gè)格式化字符串:
    return c.Redirect("/hotels/%d/settings", hotelId)

通常用來(lái)傳送參數(shù).

它返回 302 (臨時(shí)重定向) 狀態(tài)碼.

添加你自己的 Result

下面是一個(gè)添加簡(jiǎn)單結(jié)果的例子。

創(chuàng)建此類型:

type Html string

func (r Html) Apply(req *Request, resp *Response) {
    resp.WriteHeader(http.StatusOK, "text/html")
    resp.Out.Write([]byte(r))
}

在一個(gè)控制器方法中使用它:

func (c *App) Action() revel.Result {
    return Html("<html><body>Hello World</body></html>")
}

狀態(tài)碼

每一個(gè)Result 都會(huì)設(shè)置一個(gè)默認(rèn)的狀態(tài)碼,你也可以重新設(shè)置默認(rèn)的狀態(tài)代碼:

func (c *App) CreateEntity() revel.Result {
    c.Response.Status = 201
    return c.Render()
}
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)