Gin框架简易搭建(4)--项目开发

项目信息

项目四个初始功能所在处,很快将对投票验证信息以及录入活动和参赛者的功能将在后续实现

需求分析

这个项目需要如下的功能:

  1. 参赛人员列表及详情(前端)
  2. 排行榜
  3. 投票功能
  4. 用户的注册和登陆
  5. 活动规则(前端)

数据库

表名称 参数一(主键) 参数二 参数三 参数四 参数五 参数六 参数七 参数八
activity(活动表) id(主键) name(活动名称) add_time(添加时间)
player(参赛选手表) id(主键) nickname(选手名称) aid(参与活动) ref(编号) avatar(头像int) score(得分) declaration(个性签名) update_time(更新时间)
user(群众评委) id(主键) username(用户名) password(密码) add_time(添加时间) update_time(更新时间)
vote(用户给选手点赞记录表) id(主键) user_id(投票者id) player_id(参赛选手id) add_time(添加时间)

补充

  1. gin.Context,这个结构体方便我们通过它访问http请求的各种信息。简而言之,就是通过修改它的内容,在返回的报文显示。
  2. module文件夹中的结构体Json后缀是什么意思?在json中,后缀里的名字就是这个结构体成员变量的名称;而程序中该成员变量的名称是前面声明的名称
  3. where查询:查到的话——Error返回nil;没查到返回错误信息,这一点还是挺容易写错的
  4. c.DefaultPostForm获取方式:(参数1,参数2)返回值——参数1是键名,参数2是设置的“若没有查询到的返回默认值”。("username",""),这种用法,就是说如果查询到就返回查询到的用户名,查不到就返回空字符串。

数据库注意事项的

这个项目的主要问题来源于数据库

  1. 传输类型:注意结构体声明的时候,类型和数据库的类型是否一致

  2. 字段名:字段名在gormmysql之间存在转化关系,建议程序里面使用驼峰命名,数据库中使用下划线隔开

    1. 数据库字段名与结构体字段名的转换
    • 默认转换规则GORM默认会将结构体字段的驼峰命名转换为数据库字段的下划线命名。例如,Go 结构体中的字段 UserName 将自动映射到数据库中的字段 user_name

    • 自定义转换:如果需要自定义字段名的转换规则,可以通过标签(tag)来指定。例如:

      type User struct {
          UserName string `gorm:"column:username"`
      }
      

      在这种情况下,即使结构体字段名为UserName,GORM 也会将其映射到数据库中的username字段。

    1. 标签的使用
    • column 标签:通过 gorm:"column:xxx" 标签可以显式指定数据库中的字段名。
    • type 标签:可以指定数据库字段的数据类型。
    • size 标签:可以指定字段的大小(例如字符串长度)。
    • primaryKey 标签:指定字段为数据库表的主键。
    1. 自动迁移
    • 当使用 GORM的自动迁移功能(AutoMigrate)时,GORM会根据结构体字段名自动生成数据库表结构。这种情况下,GORM会自动应用上述的字段名转换规则。
    1. 忽略字段
    • 如果某些字段不需要映射到数据库表中,可以使用 gorm:"-" 标签将其忽略。
  3. sql语句查错:在sql语句使用时,建议直接在Gorm中文文档中复制,在报错信息出现时,建议直接将error打印在json文件中,在测试的插件中以报文形式返回。

代码解释

这个项目的代码可以参考项目地址里面的完整代码,下面的部分是对于开发的四个简单功能进行详细的解释

首先,我们的设计模式依旧是路由-->类controller-->模块func,对于核心的设计,选择的方法是获取信息-->验证-->录入数据库并返回json

注册

首先,注册我们使用用户名、密码、确认密码作为输入,将用户类的部分(id和用户名)通过新建结构体的方式进行返回。验证部分:

  1. 首先我们需要对输入进行验证,保证输入不为空
  2. 之后,要保证输入的密码与确认密码一致
  3. 最后,对用户数据库进行遍历,发现没有重复的用户名
func (u UserController) Register(c *gin.Context) {
   
   
	//接受用户名 密码以及确认密码
	username := c.DefaultPostForm("username", "")
	password := c.DefaultPostForm("password", "")
	confirmPassword := c.DefaultPostForm("confirm_password", "")

	//验证 输入是否存在某项为空 密码和确认密码是否一致 是否已经存在该用户
	if username == "" || password == "" || confirmPassword == "" {
   
   
		ReturnError(c, 4001, "输入的用户名、密码、确认密码其中有空项")
		return
	}
	if password != confirmPassword {
   
   
		ReturnError(c, 4002, "密码和确认密码不一致")
		return
	}
	user1, _ := models.CheckUserExist(username)
	if user1.Id != 0</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值