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,其他类型都将不能通过验证。