2016-03-01 5 views
0

Я пытаюсь проверить некоторые формы с помощью проверки Beego, но он вообще не работает: недопустимые данные проходят без ошибок.Проверка Beego принимает недопустимые данные

Это соответствующий код, я не знаю, что не так. Можете ли вы указать мне на ошибку?

https://github.com/dionyself/golang-cms/blob/master/models/form.go

package models 

import (
    "github.com/astaxie/beego" 
    "github.com/astaxie/beego/validation" 
) 

type BaseForm struct { 
    Errors map[string]string 
} 

func (form *BaseForm) Validate() bool { 
    valid := validation.Validation{} 
    b, err := valid.Valid(form) 
    if err != nil { 
     beego.Error(err) 
    } 
    if !b { 
     for _, err := range valid.Errors { 
      form.Errors[err.Key] = err.Message 
      beego.Debug(err.Key, err.Message) 
     } 
    } 
    return b 
} 

type RegisterForm struct { 
    BaseForm 
    Username string `form:"username" valid:"Required; AlphaNumeric; MinSize(4); MaxSize(300)"` 
    Password string `form:"password" valid:"Required; MinSize(4); MaxSize(30)"` 
    PasswordRe string `form:"passwordre" valid:"Required; MinSize(4); MaxSize(30)"` 
} 

func (form *RegisterForm) Valid(v *validation.Validation) { 
    // Check if passwords of two times are same. 
    if form.Password != form.PasswordRe { 
     v.SetError("PasswordRe", "Passwords did not match") 
     return 
    } 
} 

type ArticleForm struct { 
    BaseForm 
    Id   int `form:"-"` 
    Title   string `form:"title" valid:"Required;MinSize(4);MaxSize(300)"` 
    Category  int `form:"category"` 
    Content  string `form:"content" valid:"Required; MinSize(50); MaxSize(2000)"` 
    TopicTags  string `form:"topic-tags" valid:"MinSize(4); MaxSize(300)"` 
    TaggedUsers string `form:"tagged-users" valid:"MinSize(4); MaxSize(300)"` 
    AllowReviews bool `form:"allow-reviews" valid:"Required"` 
    AllowComments bool `form:"allow-comments" valid:"Required"` 
    Errors  map[string]string 
} 

func (form *ArticleForm) Valid(v *validation.Validation) { 
    if form.Category >= 0 { 
     v.SetError("Category", "Invalid category") 
     return 
    } 
} 

Некоторая документация: http://beego.me/docs/mvc/controller/validation.md

Это код, который разбирает форму:

func (this *ArticleController) Post() { 
    form := models.ArticleForm{} 
    Art := new(models.Article) 
    if err := this.ParseForm(&form); err != nil { 
     this.Abort("401") 
    } else { 
     db := this.GetDB() 
     if !form.Validate() { 
      this.Data["form"] = form 
      var cats []*models.Category 
      db.QueryTable("category").All(&cats) 
      this.Data["Categories"] = cats 
      this.ConfigPage("article-editor.html") 
      for key, msg := range form.Errors { 
       fmt.Println(key, msg) 
      } 
     } else { 
      db.Insert(Art) 
      this.Data["Article"] = Art 
      this.ConfigPage("article.html") 
     } 
    } 
} 

Примечание: FormData всегда принимается (даже пустой формы), form.Validate() всегда возвращает «true» ... 0 ошибок в журналах.

+0

Я не знаком с Beego, но я подумайте, ваш вопрос пропускает пример _invalid data_, который принимается. –

ответ

0

Это потому, что ваша структура имеет тип данных с карты [строка] интерфейса {}, который принимает любой тип данных и преобразования его в строку попытаться быть конкретными в типе данных

Смежные вопросы