go语言web开发11 - beego数据校验

当post请求提交上来数据后,我们可以用len()来获取提交数据的长度,然后根据长度判断提交的数据是否为空。

beego里自带了类似的数据校验的方法,下面就来看下beego自带的数据校验方法的使用。

 

数据校验

路由设置

beego.Router("/validata", &controllers.ValidataController{})

 

数据校验方法一(GetString直接获取提交的数据并验证):Controller内容如下

package controllers

import (
    "fmt"

    "github.com/astaxie/beego/validation"

    "github.com/astaxie/beego"
)

type ValidataController struct {
    beego.Controller
}

func (c *ValidataController) Get() {
    c.TplName = "test_validata.html"
}

func (c *ValidataController) Post() {
    // 一、获取前端提交的数据
    username := c.GetString("username")
    age := c.GetString("age")
    email := c.GetString("email")
    phone := c.GetString("phone")
    fmt.Printf("用户名:%s, 年龄:%s, 邮箱:%s, 手机:%s\n", username, age, email, phone)

    // 二、验证数据
    // 1.初始化validation
    valid := validation.Validation{}
    // 2.验证获取到的数据
    valid.Required(username, "用户名").Message("不能为空")
    valid.Required(age, "年龄").Message("字段不能为空")
    valid.Required(email, "邮箱").Message("不能为空")
    valid.Required(phone, "手机号").Message("不能为空")
    valid.Email(email, "邮箱").Message("格式不正确")      // 一个字段可以多次校验

    // 3.判断有没有错误
    if valid.HasErrors() {     // 说明有错误
        for _, err := range valid.Errors {      // 循环打印错误
            fmt.Printf("%s: %s\n", err.Key, err.Message)
        }
    }
    c.TplName = "success.html"
}

 

数据校验方法二(提交的数据解析到结构体后并验证):Controller内容如下

package controllers

import (
    "fmt"

    "github.com/astaxie/beego/validation"

    "github.com/astaxie/beego"
)

type ValidataController struct {
    beego.Controller
}
// 定义结构体
type UserInfo struct {
    UserName string `form:"username"`
    Age      int    `form:"age"`
    Email    string `form:"email"`
    Phone    int    `form:"phone"`
}

func (c *ValidataController) Get() {
    c.TplName = "test_validata.html"
}

func (c *ValidataController) Post() {
    // 二、将前端提交的数据解析到结构体并校验数据
    // 1.初始化结构体类型变量并获取数据
    user := UserInfo{}
    c.ParseForm(&user)
    fmt.Println(user)

    // 2.初始化validation
    valid := validation.Validation{}

    // 3.验证获取到的数据
    valid.Required(user.UserName, "用户名").Message("不能为空")
    valid.Required(user.Age, "年龄").Message("不能为空")
    valid.Required(user.Email, "邮箱").Message("不能为空")
    valid.Required(user.Phone, "手机号").Message("不能为空")

    // 4.错误处理
    if valid.HasErrors() {        // 有错误
        for _, err := range valid.Errors {      // 循环打印错误
            fmt.Printf("%s:%s\n", err.Key, err.Message)
        }
    }
    c.TplName = "success.html"
}

 

数据校验方法三(StructTag的方式验证数据):Controller内容如下

package controllers

import (
    "fmt"

    "github.com/astaxie/beego/validation"

    "github.com/astaxie/beego"
)

type ValidataController struct {
    beego.Controller
}

// 一、定义结构体类型并指定tag:valid字段
type UserInfo struct {
    UserName string `form:"username" valid:"Required"`
    Age      int    `form:"age" valid:"Required"`
    Email    string `form:"email" valid:"Required"`
    Phone    int    `form:"phone" valid:"Required"`
}

func (c *ValidataController) Get() {
    c.TplName = "test_validata.html"
}


func (c *ValidataController) Post() {
    // 第三种验证数据方法、structTag方式验证数据
    // 1.初始化结构体类型变量并获取提交的数据
    user := UserInfo{}
    c.ParseForm(&user)
    fmt.Println(user)

    // 2.初始化validation
    valid := validation.Validation{}

    // 3.自定义提示消息
    var MessageTmpls = map[string]string{
        "Required":     "不能为空",
        "Min":          "最小值为 %d",
        "Max":          "最大值为 %d",
        "Range":        "Range is %d to %d",
        "MinSize":      "Minimum size is %d",
        "MaxSize":      "Maximum size is %d",
        "Length":       "Required length is %d",
        "Alpha":        "Must be valid alpha characters",
        "Numeric":      "Must be valid numeric characters",
        "AlphaNumeric": "Must be valid alpha or numeric characters",
        "Match":        "Must match %s",
        "NoMatch":      "Must not match %s",
        "AlphaDash":    "Must be valid alpha or numeric or dash(-_) characters",
        "Email":        "Must be a valid email address",
        "IP":           "Must be a valid ip address",
        "Base64":       "Must be valid base64 characters",
        "Mobile":       "Must be valid mobile number",
        "Tel":          "Must be valid telephone number",
        "Phone":        "Must be valid telephone or mobile phone number",
        "ZipCode":      "Must be valid zipcode",
    }
    // 4.指定使用自定义的提示信息,不用默认的提示信息了
    validation.SetDefaultMessage(MessageTmpls)

    // 5.验证数据
    b, err := valid.Valid(&user)        // err是指结构体的定义有没有问题,b是指校验有没有问题
    if err != nil {       // 判断结构体定义有没有错误
        fmt.Println("struct error,", err)
        return
    }
    if !b {        // 判断数据校验有没有错误
        for _, dataerr := range valid.Errors {
            fmt.Printf("%s: %s\n", dataerr.Key, dataerr.Message)
        }
    }

    c.TplName = "success.html"
}

 

beego支持的校验方法说明:

Required(校验字段, "该校验字段的名称"):不能为空。

Min(min int):最小值为%d,有效类型:int,其他类型都将不能通过验证。

Max(max int):最大值为%d,有效类型:int,其他类型都将不能通过验证。

Range(min, max int):数值的范围在%d至%d,有效类型:int,其他类型都将不能通过验证。

MinSize(min int):最小长度为%d,有效类型:string slice,其他类型都将不能通过验证。

MaxSize(min int):最大长度为%d,有效类型:string slice,其他类型都将不能通过验证。

Length(length int):指定长度必须是%d,有效类型:string slice,其他类型都将不能通过验证。

Alpha:必须是有效的字母字符,有效类型string,其他类型都将不能通过验证。

Numeric:必须是有效的数字字符,有效类型string,其他类型都将不能通过验证。

AlphaNumeric:必须是有效的字符或者数字字符,有效类型:string,其他类型都将不能通过验证。

Match(pattern string):正则匹配(必须匹配格式),有效类型:string,其他类型都将不能通过验证。
    示例:(fmt.Println("%v",obj).Match)

NoMatch:正则匹配(必须不匹配格式),有效类型:string,其他类型都将不能通过验证。

AlphaDash:必须是有效的字母或数字或破折号(-_)字符,有效类型:string,其他类型都将不能通过验证。

Email:必须是有效的邮箱格式,有效类型:string,其他类型都将不能通过验证。

Ip:必须是有效的ip格式,有效类型:string,其他类型都将不能通过验证。

Base64:必须是base64编码,有效类型string,其他类型都将不能通过验证。

Mobile:必须是有效的手机号,有效类型:string,其他类型都将不能通过验证。

Tel:必须是有效的固定电话号,有效类型:string,其他类型都将不能通过验证。

Phone:必须是有效的手机号或者固定电话号,有效类型:string,其他类型都将不能通过验证。

ZipCode:必须是有效的邮政编码,有效类型:String,其他类型都将不能通过验证。

 

posted @ 2020-09-07 14:21  欧-阳  阅读(1099)  评论(0)    收藏  举报