在前面的课程中,我们已经成功学习了完成用户功能的curd,接下来我们要针对用户信息进行一些校验
信息校验模块govalidator
引入govalidator
go get github.com/asaskevich/govalidator
在项目中使用包,这里我们以验证phone和email为例
Phone string `valid:"matches(^1[3-9]{1}\d{9}$)" gorm:"column:phone" json:"phone"`
Email string `valid:"email" gorm:"column:email" json:"email"`
在service的UpdateUser方法中添加phone和email参数。
import "github.com/asaskevich/govalidator"
// UpdateUser
// @Summary 修改用户
// @Tags 用户模块
// @param id formData string false "id"
// @param name formData string false "name"
// @param password formData string false "password"
// @param phone formData string false "phone"
// @param email formData string false "email"
// @Success 200 {string} json{"code", "message"}
// @Router /user/updateUser [post]
func UpdateUser(c *gin.Context) {
user := models.UserBasic{}
id, _ := strconv.Atoi(c.PostForm("id"))
user.ID = uint(id)
user.Name = c.PostForm("name")
user.Phone = c.PostForm("phone")
user.Email = c.PostForm("email")
fmt.Println("update: ", user)
_, err := govalidator.ValidateStruct(user)
if err != nil {
fmt.Println(err)
c.JSON(200, gin.H{
"message": "修改参数格式不正确",
})
} else {
models.UpdateUser(&user)
c.JSON(200, gin.H{
"message": "修改用户成功",
})
}
}
接下来,为models中的UpdateUser添加phone和email字段:
func UpdateUser(user *UserBasic) *gorm.DB {
return utils.DB.Model(user).Updates(UserBasic{Name: user.Name, Password: user.Password, Phone: user.Phone, Email: user.Email})
}
govalidator中需要注意的点:在结构体注解中添加valid字段,作为判定依据;在service中的调用方法中添加govalidator.ValidateStruct(结构体)。
添加重复注册校验
为了防止用户名重复,我们需要添加重复用户名校验。
添加数据库查询方法
func FindUserByName(name string) UserBasic {
user := UserBasic{}
utils.DB.Where("name = ?", name).First(&user)
return user
}
在service中的CreateUser方法中添加
func CreateUser(c *gin.Context) {
user := models.UserBasic{}
user.Name = c.Query("name")
password := c.Query("password")
rePassword := c.Query("rePassword")
data := models.FindUserByName(user.Name)
if data.Name != "" {
c.JSON(-1, gin.H{
"message": "用户名已经注册",
})
return
}
if password != rePassword {
c.JSON(-1, gin.H{
"message": "两次密码不一致",
})
return
}
models.CreateUser(&user)
c.JSON(200, gin.H{
"message": "新增用户成功",
})
}
测试数据库结构验证一下即可。