gpt4 book ai didi

validation - beego 验证接受无效数据

转载 作者:数据小太阳 更新时间:2023-10-29 03:27:40 32 4
gpt4 key购买 nike

我正在尝试使用 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 个错误。

最佳答案

这是因为你的结构有一个带有 map[string]interface{} 的数据类型,它接受任何数据类型并将它转换成一个字符串,尝试在数据类型上是特定的

关于validation - beego 验证接受无效数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35731806/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com