Gin投票系统(2)

投票系统

数据库的建立

先分析需求,在sql中建立数据库,关于项目数据库如何建立可以在“goweb项目创建流程分析中看如何去建表”

成功后目前有四个表:

vote,user,vote_opt,vote_opt_user

image-20231120163637699

建立数据库,可以使用网上的sql转gorm网站,把建表语句直接转换成结构体,

放在model下的model.go文件下,作为全部数据库存放处

package modelimport "database/sql"//这里存放各种gorm建表语句type VoteOptUser struct {Id         sql.NullInt64  `gorm:"column:id;primary_key;AUTO_INCREMENT"`UserId     sql.NullInt64  `gorm:"column:user_id"`VoteId     sql.NullInt64  `gorm:"column:vote_id"`VoteOptId  sql.NullInt64  `gorm:"column:vote_opt_id"`CreateTime sql.NullString `gorm:"column:create_time"`UpdateTime sql.NullString `gorm:"column:update_time"`
}func (v *VoteOptUser) TableName() string {return "vote_opt_user"
}type VoteOpt struct {Id          sql.NullInt64  `gorm:"column:id;primary_key;AUTO_INCREMENT"`Name        sql.NullString `gorm:"column:name"`VoteId      sql.NullInt64  `gorm:"column:vote_id"`Count       sql.NullInt32  `gorm:"column:count"`CreatedTime sql.NullString `gorm:"column:created_time"`UpdateTime  sql.NullString `gorm:"column:update_time"`
}func (v *VoteOpt) TableName() string {return "vote_opt"
}type Vote struct {Id          sql.NullInt64  `gorm:"column:id;primary_key;AUTO_INCREMENT"`Title       sql.NullString `gorm:"column:title"`Type        sql.NullInt32  `gorm:"column:type;comment:'0是单选1是多选'"`Status      sql.NullInt32  `gorm:"column:status;comment:'0开放1超时'"`Time        sql.NullInt64  `gorm:"column:time;comment:'有效时长'"`UserId      sql.NullInt64  `gorm:"column:user_id;comment:'创建人是谁'"`CreatedTime sql.NullString `gorm:"column:created_time;comment:'创建时间'"`UpdatedTime sql.NullString `gorm:"column:updated_time;comment:'更新时间'"`
}func (v *Vote) TableName() string {return "vote"
}type User struct {Id          sql.NullInt64  `gorm:"column:id;primary_key;AUTO_INCREMENT"`Name        sql.NullString `gorm:"column:name"`Password    sql.NullString `gorm:"column:password"`CreatedTime sql.NullString `gorm:"column:created_time"`UpdateTime  sql.NullString `gorm:"column:update_time"`
}func (u *User) TableName() string {return "user"
}

建立完成,可以先测试是否成功

image-20231120164752983

测试:

在model中建立:vote,model_test文件,测试数据库是否连接成功,能否查出数据

//model_text测试文件:
package model
import ("fmt""testing"
)
func TestGetVotes(t *testing.T) { //该方法测试vote是否生效NewMysql() //连接数据库//测试用例r := GetVotes() //查询方法fmt.Printf("ret:%+v", r)//%+v 是一个格式化占位符,表示以“扩展”格式输出变量的值。对于结构体(struct)类型的变量,%+v 会输出字段名和字段值。//和%v区别:通用的格式化占位符,根据变量的实际类型进行格式化输出。对于结构体,它会输出字段的值,但不会包括字段名。Close()
}
//vote文件:其实和user文件中方法基本一致,都是封装查表方法
package modelimport "fmt"func GetVotes() []Vote { //该方法会输出Vote切片类型的值//封装查询方法,查询投票项目的详情ret := make([]Vote, 0) //定义ret为切片类型,0表示长度为0,内部存放具体值为vote类型err := Conn.Table("vote").Find(&ret).Errorif err != nil {fmt.Printf("err:%s", err.Error())}return ret
}

当在vote中加入数据:

image-20231120165210734

再在test方法中测试:输出

image-20231120165335067

(后边没截完)

因为ret是切片类型,所以能同时查多条记录,测试完成,可以写逻辑层和router层代码啦!!!

将所有表名展示到网页上

首先先试试把vote的Title展示到页面上:

将index.tmpl代码改为:

写模板文件
<!doctype html>
<html lang="en">
<head><title>香香编程-投票项目</title>
</head>
<body>
<main>{{range $key,$value := .vote}}<h2>{{$value.Title}}</h2>{{/*        用模板写出只要所有ret的title*/}}{{end}}
</main>
</body>
</html>

逻辑层下

func Index(context *gin.Context) {ret := model.GetVotes()context.HTML(http.StatusOK, "index.tmpl", gin.H{"vote": ret})
}
加载模板文件,传入的.表示ret,即整个查到的vote数据

效果展示:

数据库

image-20231120174403074

一个简单的投票表名展示就做好了,

按照这个思路,我们可以设置点击表名,查看每个表的具体数据

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/178273.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ERRO报错

无法下载nginx 如下解决&#xff1a; 查看是否有epel 源 安装epel源 安装第三方 yum -y install epel-release.noarch NGINX端口被占用 解决&#xff1a; 编译安装的NGINX配置文件在/usr/local/ngin/conf 修改端口

2024年天津艺术职业学院专升本报名工作的通知

天津艺术职业学院关于2024年天津市高职升本科考试报名工作的通知 请天津艺术职业学院各位2024届大专应届毕业生&#xff08;含高职扩招2024年应届毕业生&#xff09;查阅以下通知。 一、网上报名 &#xff08;一&#xff09;时间及网址&#xff1a;请于2023年12月4日9:00至6日…

DM8误删除操作恢复方案

达梦数据库三种在误删除操作后的回退方案 一、闪回表 当用户操作不慎导致错误的删改数据时&#xff0c;闪回方式可以恢复数据。闪回技术&#xff0c;就是为了用户可以迅速处理这种 数据逻辑损坏的情况而产生的。 闪回技术主要是通过回滚段存储的 UNDO 记录来完成历史记录的还原…

C语言:编程实现1!+2!+3!+4!+……+n!

分析&#xff1a; #include<stdio.h>//这是一个预处理指令&#xff0c;将stdio.h头文件包含到程序中&#xff0c;以便使用输入输出函数。 int main()//这是程序的主函数&#xff0c;是程序执行的入口点。 int i, a 1, t 0, n;//定义了整型变量i、a、t和n。其中&#x…

13.Spring源码解析-prepareBeanFactory

点进去 此处是 Spel表达式设置 BeanExpressionResolver 此接口只有一个实现: StandardBeanExpressionResolver。接口只含有一个方法: Object evaluate(String value, BeanExpressionContext evalContext) prepareBeanFactory将一个此对象放入BeanFactory: beanFactory.setB…

使用elementPlus去除下拉框蓝色边框

// 下拉框去除蓝色边框 .el-select {--el-select-input-focus-border-color: none !important; }

算法之插入排序及希尔排序(C语言版)

我们来实现上述排序 一.插入排序. 当插入第i(i>1)个元素时&#xff0c;前面的array[0],array[1],.,array[i-1]已经排好序&#xff0c;此时用array[i的排序码与array[i-1]array[i-2].的排序码顺序进行比较&#xff0c;找到插入位置即将arrayU插入&#xff0c;原来位置上的元…

Python神器解密:掌握property特性巧管理属性

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com property 是Python中的一个内置装饰器&#xff0c;它用于创建属性并允许开发者定义特定的操作&#xff0c;例如获取&#xff08;getter&#xff09;、设置&#xff08;setter&#xff09;和删除&#xff08;dele…

Vue中的过滤器了解吗?过滤器的应用场景有哪些?

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;Vue篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来vue篇专栏内容:vue-filter过滤器 目录 一、是什么 二、如何用 定义filter 小结&#xff1a; 三、应用场景 四…

苍穹外卖项目笔记(6)— Redis操作营业状态设置

1 在 Java 中操作 Redis 1.1 Redis 的 Java 客户端 Jedis&#xff08;官方推荐&#xff0c;且命令语句同 redis 命令&#xff09;Lettuce&#xff08;底层基于 Netty 多线程框架实现&#xff0c;性能高效&#xff09;Spring Data Redis&#xff08;对 Jedis 和 Lettuce 进行了…

同为科技(TOWE)模块化定制化让每条PDU实现专属供电解决方案

作为追求最高功率和空间效率的动态数据中心的理想产品&#xff0c;模块化、定制化PDU是追求最高功率和空间效率的动态数据中心的理想产品。同为科技&#xff08;TOWE&#xff09;是我国PDU行业的开创者和领导者&#xff0c;曾率先于中国电源分配单元http://www.pdu.com.cn网站上…

机器学习实战第3天:手写数字识别

☁️主页 Nowl &#x1f525;专栏《机器学习实战》 《机器学习》 &#x1f4d1;君子坐而论道&#xff0c;少年起而行之 ​ 文章目录 一、任务描述 二、数据集描述 三、主要代码 &#xff08;1&#xff09;主要代码库的说明与导入方法 &#xff08;2&#xff09;数据预…

2023-11-28 C语言if语句多个||或 与的时时候,会顺序执行,不满足条件则退出,不会再比较后面的内容,实例测试

一、if(i > 0 || image(0) > 5)或者if(i > 0 && image(0) > 5)&#xff0c;C语言if语句多个||或 与&&的时时候&#xff0c;会顺序执行&#xff0c;不满足条件则退出&#xff0c;不会再比较后面的内容。 二、测试代码 #include <stdio.h> #i…

成为网络安全高手!教你如何做出专业级别的渗透测试

01、信息收集 1、域名、IP、端口 域名信息查询&#xff1a;信息可用于后续渗透 IP信息查询&#xff1a;确认域名对应IP&#xff0c;确认IP是否真实&#xff0c;确认通信是否正常 端口信息查询&#xff1a;NMap扫描&#xff0c;确认开放端口 发现&#xff1a;一共开放两…

Linux CentOS_7解决无法上网的问题

参考视频&#xff1a;保姆式教学虚拟机联网liunx(centos)_哔哩哔哩_bilibili 第一步&#xff1a;选择网络模式 第二步&#xff1a;配置网卡命令&#xff1a;打开终端执行命令&#xff1a; 1、先切换到根目录下&#xff0c;防止在第执行cd /etc/sysconfig/network-scripts命的…

java多线程-扩展知识一:进程线程、并发并行、同步异步

1、进程 进程&#xff08;Process&#xff09;是计算机中的程序关于某数据集合上的一次运行活动&#xff0c;是系统进行资源分配的基本单位&#xff0c;是操作系统结构的基础。在早期面向进程设计的计算机结构中&#xff0c;进程是程序的基本执行实体&#xff1b;在当代面向线程…

云计算——ACA学习 阿里云云计算服务概述

作者简介&#xff1a;一名云计算网络运维人员、每天分享网络与运维的技术与干货。 公众号&#xff1a;网络豆云计算学堂 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a; 网络豆的主页​​​​​ 目录 写在前面 前期回顾 本期介绍 前言了解 一…

【领域驱动设计 学习目标及大纲】从CRUD到架构设计

从2018年至今&#xff0c;已工作了5年有余&#xff0c;回望这5年的工作历程&#xff0c;虽然一直在学习、一直在积累&#xff0c;但其实都在术的层面上停留&#xff0c;也就是具体的技术点。这5年多的时间里其实也不是没有窥道的想法&#xff1a; 一次是2018年刚工作的时候&am…

FPGA模块——AD高速转换模块(并行输出转换的数据)

FPGA模块——AD高速转换模块&#xff08;并行输出转换的数据&#xff09; &#xff08;1&#xff09;AD9280/3PA9280芯片&#xff08;2&#xff09;代码 &#xff08;1&#xff09;AD9280/3PA9280芯片 AD9280/3PA9280芯片的引脚功能&#xff1a; 工作电压2.7到5.5v 数据对应&a…