Golang Web基础基于Restful API实现用户表的增删该查
程序员文章站
2022-06-19 11:16:17
Model层中User.go 存放数据定义以及对数据进行CRUD操作type User struct {gorm.ModelUsername string `gorm:"type:varchar(20);not null " json:"username"`Password string `gorm:"type:varchar(20);not null" json:"password"`Role int `gorm:"type:int" json:"role"`}// 查询用户是...
Model层中User.go 存放数据定义以及对数据进行CRUD操作
type User struct {
gorm.Model
Username string `gorm:"type:varchar(20);not null " json:"username"`
Password string `gorm:"type:varchar(20);not null" json:"password"`
Role int `gorm:"type:int" json:"role"`
}
// 查询用户是否存在
func CheckUser(name string) (code int) {
var users User
db.Select("id").Where("username = ?",name).First(&users)
if users.ID > 0{
return errmsg.ERROR_USERNAME_USED
}
return errmsg.SUCCSE
}
// 新增用户
func CreaterUser(data *User)int{
data.Password = ScryptPw(data.Password)
err := db.Create(&data).Error
if err != nil{
return errmsg.ERROR
}
return errmsg.SUCCSE
}
// 查询用户列表
func GetUsers(pageSize int,pageNum int) []User{
var users []User
err := db.Limit(pageSize).Offset((pageNum-1)*pageSize).Find(&users).Error
if err !=nil && err != gorm.ErrRecordNotFound{
return nil
}
return users
}
// 密码加盐
func ScryptPw(password string) string{
const KeyLen = 10
salt := make([]byte, 8)
salt = []byte{12,32,4,6,77,22,222,11}
HashPwd, err := scrypt.Key([]byte(password), salt,16384,8,1,KeyLen)
if err != nil{
log.Fatal(err)
}
fpw := base64.StdEncoding.EncodeToString(HashPwd)
return fpw
}
// 编辑用户信息
func EditUser(id int, data *User) int{
maps := make(map[string]interface{})
maps["username"] = data.Username
maps["role"] = data.Role
err = db.Model(&User{}).Where("id = ? ",id).Updates(maps).Error
if err != nil{
return errmsg.ERROR
}
return errmsg.SUCCSE
}
// 删除用户
func DeleteUser(id int) int{
var user User
err := db.Where("id = ? ",id).Delete(&user).Error
if err !=nil{
return errmsg.ERROR
}
return errmsg.SUCCSE
}
Control层中放具体从页面获取数据以及与这些数据交互的方法
// 添加用户
func AddUser(c *gin.Context){
var data model.User
_ = c.ShouldBindJSON(&data)
code := model.CheckUser(data.Username)
if code == errmsg.SUCCSE{
model.CreaterUser(&data)
}
c.JSON(http.StatusOK,gin.H{
"status":code,
"data":data,
"message":errmsg.GetErrMsg(code),
})
}
// 查询用户列表
func GetUsers(c *gin.Context){
pageSize, _ := strconv.Atoi(c.Query("pagesize"))
pageNum,_ := strconv.Atoi(c.Query("pagenum"))
if pageSize == 0{
pageNum = -1
}
if pageNum == 0{
pageSize = -1
}
data := model.GetUsers(pageSize, pageNum)
code := errmsg.SUCCSE
c.JSON(http.StatusOK,gin.H{
"status":code,
"data":data,
"message":errmsg.GetErrMsg(code),
})
}
// 编辑用户
func EditUser(c *gin.Context){
var data model.User
id, _ := strconv.Atoi(c.Param("id"))
c.ShouldBindJSON(&data)
code := model.CheckUser(data.Username)
if code == errmsg.SUCCSE {
model.EditUser(id,&data)
}
if code == errmsg.ERROR_USERNAME_USED{
c.Abort()
}
c.JSON(http.StatusOK,gin.H{
"status":code,
"message":errmsg.GetErrMsg(code),
})
}
// 删除用户
func DeleteUser(c *gin.Context) {
id, _ := strconv.Atoi(c.Param("id"))
code := model.DeleteUser(id)
c.JSON(http.StatusOK,gin.H{
"status":code,
"message":errmsg.GetErrMsg(code),
})
}
在路由模块中,配置相关的路由,并用POSTMAN完成接口的测试
func InitRouter() {
gin.SetMode(utils.AppMode)
r := gin.Default()
router := r.Group("api/v1")
{
// 用户模块的路由接口
router.POST("user/add",v1.AddUser)
router.GET("users",v1.GetUsers)
router.PUT("user/:id",v1.EditUser)
router.DELETE("user/:id",v1.DeleteUser)
// 分类模块的路由接口
// 文章模块的路由接口
}
r.Run(utils.HttpPort)
}
本文地址:https://blog.csdn.net/wwxy1995/article/details/111994583