go语⾔web开发11-beego数据校验当post请求提交上来数据后,我们可以⽤len()来获取提交数据的长度,然后根据长度判断提交的数据是否为空。beego⾥⾃带了类似的数据校验的⽅法,下⾯就来看下beego⾃带的数据校验⽅法的使⽤。
数据校验
路由设置
beego.Router("/validata", &controllers.ValidataController{})
数据校验⽅法⼀(GetString直接获取提交的数据并验证):Controller内容如下
package controllers
import (
"fmt"
"github/astaxie/beego/validation"
"github/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/astaxie/beego/validation"
"github/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/astaxie/beego/validation"
"github/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,其他类型都将不能通过验证。
go语言开发环境搭建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,其他类型都将不能通过验证。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论