# 用于数据校验:
* #### 校验数据是否合法
## **安装**:
~~~
go get github.com/astaxie/beego/validation
~~~
## **测试**:
~~~
go test github.com/astaxie/beego/validation
ok github.com/astaxie/beego/validation 0.449s
~~~
## **beego中使用**:
~~~
func (l *LoginController) Post() {
name := l.GetString("name")
age := l.GetString("age")
addr := l.GetString("addr")
valid := validation.Validation{}
valid.Required(name,"name") // 这里的key是valid.Errors中的key,用来获取err的key
valid.Required(age,"age")
valid.Required(addr,"addr")
if valid.HasErrors() {
// 如果有错误信息,证明验证没通过
// 打印错误信息
for _, err := range valid.Errors {
fmt.Println(err.Key, err.Message)
message := err.Key + err.Message
l.Ctx.WriteString(message)
}
}
l.TplName = "login.html"
}
~~~
## **自定义错误信息**:
~~~
valid.Required(name,"name").Message("用户名不能为空") // 这里的key是valid.Errors中的key,用来获取err的key
valid.Required(age,"age").Message("年龄不能为空")
valid.Required(addr,"addr").Message("地址不能为空")
~~~
## **解析到结构体并校验数据**:
~~~
type LoginParams struct {
Name string
Age int
Addr string
}
func (l *LoginController) Post() {
valid := validation.Validation{}
params := LoginParams{}
if err := l.ParseForm(¶ms); err != nil {
//handle error
return
}
valid.Required(params.Name,"name").Message("用户名不能为空")
valid.Required(params.Age,"age").Message("年龄不能为空")
valid.Required(params.Addr,"addr").Message("地址不能为空")
if valid.HasErrors() {
// 如果有错误信息,证明验证没通过
// 打印错误信息
for _, err := range valid.Errors {
fmt.Println(err.Key, err.Message)
message := err.Key + err.Message
l.Ctx.WriteString(message)
}
}
l.TplName = "login.html"
}
~~~
## **通过 StructTag校验数据:**
* 验证函数写在 "valid" tag 的标签里
* 各个函数之间用分号 ";" 分隔,分号后面可以有空格
* 参数用括号 "()" 括起来,多个参数之间用逗号 "," 分开,逗号后面可以有空格
* 正则函数(Match)的匹配模式用两斜杠 "/" 括起来
* 各个函数的结果的 key 值为字段名.验证函数名
~~~
type LoginParams struct {
Name string valid:"Required"
Age int valid:"Required;MinSize(2)"
Addr string valid:"Required"
}
func (l *LoginController) Post() {
valid := validation.Validation{}
// 解析到结构体
params := LoginParams{}
if err := l.ParseForm(¶ms); err != nil {
//handle error
return
}
//重写错误信息:validation.SetDefaultMessage(map)
var messages = map[string]string{
"Required": "不能为空",
"MinSize": "最短长度为 %d",
"Length": "长度必须为 %d",
"Numeric": "必须是有效的数字",
"Email": "必须是有效的电子邮件地址",
"Mobile": "必须是有效的手机号码",
}
validation.SetDefaultMessage(messages)
// 校验
b, err := valid.Valid(¶ms)
// 验证StructTag 是否正确
if err != nil {
fmt.Println(err)
}
if !b {
// 验证没通过,则b为false
for _, err := range valid.Errors {
fmt.Println(err.Key, err.Message)
message := err.Key + err.Message
l.Ctx.WriteString(message)
}
}
}
~~~
### 多个StructTag之间用空格隔开
- go环境搭建
- 解决go get网络慢的问题
- beego的安装
- bee的安装
- 编辑器
- go module
- 配置文件详解
- 配置文件其他说明
- 路由方法
- 路由
- 数据校验
- 校验函数
- 页面跳转
- 获取前端数据
- json文件的获取
- xsrf的用法
- xsrf的防护
- srfs和json的搭配
- flash的用法
- 过滤器
- url反转
- 各类数据的处理
- 模板函数
- 内置模板函数
- 自定义模板函数
- 模板
- 模板处理
- 模板渲染
- 视图文件的处理
- 静态文件
- 请求方式判断
- 验证码
- 另一种方法
- 分页类
- session
- 登录判断
- orm模块
- 使用方法
- mysql的安装
- 安装orm及驱动
- 建立模型
- 自定义模型
- 增删改查
- 高级查询
- 常见问题汇总
- 代码收藏
- 打包部署
- go build打包
- utils收藏
- 新goer容易犯的错
- 字符串操作