这是我参与「第五届青训营 」伴学笔记创作活动的第 7 天
一、完成用户功能的基本模块
加入修改电话号码和邮箱
先引入
get github.com/asaskevich/govalidator
在结构体字段后面添加检验规则
Phone string `valid:"matches(^1[3-9]{1}\\d{9}$)"`
Email string `valid:"email"`
最后在相应的service添加上
_,err := govalidator.ValidateStruct(user)
1.router包里面的app.go
r := gin.Default()
docs.SwaggerInfo.BasePath = ""
r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerfiles.Handler))
r.GET("/index", service.GetIndex)
r.GET("/user/getUserList", service.GetUserList)
r.GET("/user/createUser",service.CreateUser)
r.GET("/user/deleteUser",service.DeleteUser)
r.POST("/user/updateUser",service.UpdateUser)
return r
2.models包里的userbasic方法
//添加相应的结构体信息字段
Phone string `valid:"matches(^1[3-9]{1}\\d{9}$)"`
Email string `valid:"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})
}
3.service包里的userservice.go完成相应的方法
注意需要在gin-swagger查询具体需要的ui框架
// 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.Password = c.PostForm("password")
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": "更新成功!",
})
}
}
4.swag init
前三步完成后,需要在终端中输入swag init,将相应的接口写入swagger中,成功显示后那么此次接口即完成编写。
总结:三个文件夹包里的关系
models:里面存储着数据库的信息字段,也即结构体,当有字段需要校验时,需要在其后面添加上“valid:”。同时,里面还存储着数据库的调用方法,当在service包中对相应字段进行修改时,数据将会通过models里的这个方法传回数据库,达到更新的目的。
service:里面存放着接口所需要用的方法,用于对数据库进行更新,方法名与models中的方法名一致,注意还需要对上方注释swagger-ui进行修改。
router:当对方法编辑完成时,需要在路由中添加对应的网络请求,即GET或者POST,并将相应的路径添加进去。