Go Web开发之Revel - 验证

Revel提供内建的函数来验证参数.这里有一对部件:

  • 一个验证上下文收集器和消息验证错误(keys和消息)
  • 帮助函数检查数据并把错误信息加入上下文
  • 一个模板函数从验证上下的key获得错误信息

更深入的了解验证可以看一下 示例demo

内联错误信息

这个示例演示用内联错误信息验证字段.

func (c MyApp) SaveUser(username string) rev.Result {

    // Username (required) must be between 4 and 15 letters (inclusive).

    c.Validation.Required(username)

    c.Validation.MaxSize(username, 15)

    c.Validation.MinSize(username, 4)

    c.Validation.Match(username, regexp.MustCompile("^\\w*$"))



    if c.Validation.HasErrors() {

        // Store the validation errors in the flash context and redirect.

        c.Validation.Keep()

        c.FlashParams()

        return c.Redirect(Hotels.Settings)

    }



    // All the data checked out!

    ...

}

一步一步的:

  1. 在username上评估4个不同的条件(需要,最大值,最小值,匹配).
  2. 每一个评估返回一个ValidationResult.失败的ValidationResults存放在Validation上下文.
  3. 作为构建应用程序的一部分.Revel记录被验证的变量的名字并用它作为Validation上下文的缺省key (为了之后查询)
  4. Validation.HasErrors() 如果上下文是非空的返回true
  5. Validation.Keep() 告诉Revel序列化ValidationErrors到Flash cookie.
  6. Revel返回一个转向到Hotels.Settings action

Hotels.Settings aciton渲染一个模板:

{{/* app/views/Hotels/Settings.html */}}

...

{{if .errors}}Please fix errors marked below!{{end}}

...

<p class="{{if .errors.username}}error{{end}}">

    Username:

    <input name="username" value="{{.flash.username}}"/>

    <span class="error">{{.errors.username.Message}}</span>

</p>

它做了3件事:

  1. 检查errors字典的username看看是否这个字段有一个错误
  2. 用flash的参数值预填充input
  3. 在字段旁边显示错误提示信息(我们没有规定任何错误信息,但是每一个验证函数提供了一个默认的)

注意:字段模板帮助函数让使用验证错误框架写模板更方便一些.

顶部错误信息

如果错误信息被收集到一个地方,模板可以被简化(例如, 一个大的红色红框在页面的最上面)

这里和之前的示例只有两个不同

  1. 我们在ValidationError上规定一个消息来代替key
  2. 我们在表单的最上方打印全部的错误消息

下面是代码:

func (c MyApp) SaveUser(username string) rev.Result {

    // Username (required) must be between 4 and 15 letters (inclusive).

    c.Validation.Required(username).Message("Please enter a username")

    c.Validation.MaxSize(username, 15).Message("Username must be at most 15 characters long")

    c.Validation.MinSize(username, 4).Message("Username must be at least 4 characters long")

    c.Validation.Match(username, regexp.MustCompile("^\\w*$")).Message("Username must be all letters")



    if c.Validation.HasErrors() {

        // Store the validation errors in the flash context and redirect.

        c.Validation.Keep()

        c.FlashParams()

        return c.Redirect(Hotels.Settings)

    }



    // All the data checked out!

    ...

}

模板:

{{/* app/views/Hotels/Settings.html */}}

...

{{if .errors}}

<div class="error>

    <ul>

    {{range .errors}}

        <li> {{.Message}}

    {{end}}

    </ul>

</div>

{{end}}

...

 

 

至此结束.

你可能感兴趣的:(web开发)