# 用于數據校驗:
* #### 校驗數據是否合法
## **安裝**:
~~~
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容易犯的錯
- 字符串操作