首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Beego验证接受无效数据

Beego验证接受无效数据
EN

Stack Overflow用户
提问于 2016-03-02 03:33:11
回答 1查看 908关注 0票数 0

我正在尝试使用Beego验证来验证一些表单,但它根本不起作用:无效的数据传递没有错误。

这是相关代码,我不知道出了什么问题。你能指出我的错误吗?

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

代码语言:javascript
复制
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

这是解析表单的代码:

代码语言:javascript
复制
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个错误。

EN

回答 1

Stack Overflow用户

发布于 2016-07-28 17:12:58

这是因为您的struct有一个数据类型,其中mapstringinterface{}可以接受任何数据类型,并将其转换为字符串,请尝试在数据类型中指定

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35731806

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档