举报投诉联系我们 手机版 热门标签 名动网
您的位置:名动网 > Revel Results

Revel Results

2023-04-20 00:20 Revel教程

 Revel Results

控制器方法必须返回一个revel.Result, 用来处理响应结果,其接口定义如下:

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

revel.Controller 使用以下方法来处理响应结果:

  • Render, RenderTemplate - 渲染模板, 传送参数.
  • RenderJson, RenderXml - 序列化结构体到 json 或 xml.
  • RenderText - 返回一个明文响应.
  • Redirect - 重定向到一个控制器方法 或 URL
  • RenderFile - 返回一个文件, 一般用于响应文件下载.
  • RenderError - 渲染 errors/500.html 模板来返回一个 500 错误.
  • NotFound - 渲染 errors/404.html 模板来返回一个 404 错误.
  • Todo - 返回一个存根响应(500)

此外,开发者可以自定义revel.Result.

设置状态码/内容类型

每个内建的 Result 都有一个默认的状态码和内容类型,简单的设置相关属性就可以修改这些默认值:

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. 添加参数到控制器的 RenderArgs 中, 使用变量的名字作为字典的key.
  2. 使用传送的参数渲染模板 “views/Controller/Action.html”。

如果不成功 (比如,没有找到模板), 将返回 ErrorResult.

这允许开发人员编写:

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

在模板中引用变量 “myValue”。这通常比构建一个明确的map更方便,因为在许多情况下,数据将被作为局部变量处理。

注意: Revel 通过调用的控制器方法名来确定使用哪个模板,查找参数名。因此, c.Render() 只可称为由操作。

RenderJson / RenderXml

应用程序可以调用 RenderJson 或 RenderXml 并传送任意类型的变量 (通常是一个 struct). Revel 会使用 json.Marshal orxml.Marshal对变量进行序列化操作.

如果 app.conf 配置文件中 results.pretty=true, 将使用 MarshalIndent 进行序列化, 生成漂亮的缩进,方便使用。

重定向

一个辅助函数是用于生成重定向。它有两种方式使用:

  1. 重定向到一个控制器方法(不带参数):
    return c.Redirect(Hotels.Settings)

这种形式是非常有用的,因为它提供了一定程度的路由类型安全性和独立性(自动生成URL)。

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

通常用来传送参数.

它返回 302 (临时重定向) 状态码.

添加你自己的 Result

下面是一个添加简单结果的例子。

创建此类型:

type Html string

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

在一个控制器方法中使用它:

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

状态码

每一个Result 都会设置一个默认的状态码,你也可以重新设置默认的状态代码:

func (c *App) CreateEntity() revel.Result {
    c.Response.Status = 201
    return c.Render()
}
阅读全文
以上是名动网为你收集整理的 Revel Results全部内容。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
相关文章
  •  GoFrame 高级特性-HTTPS & TLS

    GoFrame 高级特性-HTTPS & TLS

    2023-04-11 GoFrame教程

    HTTPS服务建立​HTTPS​服务非常简单,使用框架​WebServer​提供的​​EnableHTTPS​(certFile,keyFilestring)error​方法即可...

  • goframe api GoFrame 连接对象-基本介绍

    goframe api GoFrame 连接对象-基本介绍

    2023-05-04 GoFrame教程

    ​gtcp​模块提供了简便易用的​gtcp.Conn​链接操作对象。使用方式:import "github.com/gogf/gf/v2/net/gtcp"接口文档:https:...

  • iris安装包 iris 安装

    iris安装包 iris 安装

    2023-04-03 iris教程

    Iris是一个跨平台的软件。唯一的要求是Go编程语言1.14及更高版本。$ mkdir myapp$ cd myapp$ go mod init myapp$ go get github....

  •  Gin JSONP

    Gin JSONP

    2023-05-10 Gin教程

    使用​JSONP向不同域的服务器请求数据。如果查询参数存在回调,则将回调添加到响应体中。func main() {r := gin.Default()r.GET(...

  • fastapi demo FastAPI教程 额外的模型

    fastapi demo FastAPI教程 额外的模型

    2023-04-19 FastAPI教程

    我们从前面的示例继续,拥有多个相关的模型是很常见的。对用户模型来说尤其如此,因为:输入模型需要拥有密码属性。输出模型不应...

© 2024 名动网 mdwl.vip 版权所有 联系我们