内容简介:版权声明:本文为博主尹成联系QQ77025077,微信18510341407原创文章,欢迎转载侵权不究。 https://blog.csdn.net/yincheng01/article/details/84068782
版权声明:本文为博主尹成联系QQ77025077,微信18510341407原创文章,欢迎转载侵权不究。 https://blog.csdn.net/yincheng01/article/details/84068782
#Models实现
将ancientpoetry.sql导入数据库并执行,创建对应的数据库和表,在项目中的models文件夹下创建对应的model,并为每个model实现对应的基础方法。在init.go中获取配置文件中和数据库县官的信息,注册模型并连接数据库。部分代码如下:
package models import ( "net/url" "github.com/astaxie/beego" "github.com/astaxie/beego/orm" _ "github.com/go-sql-driver/mysql" ) func init() { //从配至文件中获取ip dbhost := beego.AppConfig.String("db.host") //从配至文件中获取端口 dbport := beego.AppConfig.String("db.port") //从配至文件中获取用户名 dbuser := beego.AppConfig.String("db.user") //从配至文件中获取密码 dbpassword := beego.AppConfig.String("db.password") //从配至文件中获取数据库名称 dbname := beego.AppConfig.String("db.name") //从配至文件中获取时区 timezone := beego.AppConfig.String("db.timezone") //如果端口号为空,则赋予默认值3306 if dbport == "" { dbport = "3306" } //拼接数据库信息 dsn := dbuser + ":" + dbpassword + "@tcp(" + dbhost + ":" + dbport + ")/" + dbname + "?charset=utf8" // fmt.Println(dsn) if timezone != "" { //QueryEscape函数对s进行转码使之可以安全的用在URL查询里。 dsn = dsn + "&loc=" + url.QueryEscape(timezone) } //注册数据库 orm.RegisterDataBase("default", "mysql", dsn) //注册模型 orm.RegisterModel(new(Auth), new(Admin), new(InfoList), new(InfoClass)) //从配至文件中获取运行模式 /*if beego.AppConfig.String("runmode") == "dev" { orm.Debug = true }*/ } //获取表名 func TableName(name string) string { return beego.AppConfig.String("db.prefix") + name }
#前台实现
效果图如下:
该页面树妖实现了古诗的展示,主要有四个分类:诗词古韵,国学经典,开心儿歌,儿童古诗,其中每个分类对应不同的数据库中不同的表,点击某一篇古诗词查看古诗词详情,在后台获取古诗词的id,通过该id查询数据库,将古诗详情在页面上展示。
func (self *WwwController) Index() { //创建存储过滤条件的切片 filters := make([]interface{}, 0) //将过滤条件status=1追加到切片 filters = append(filters, "status", 1) //将过滤条件class_id=5(开心儿歌)追加到切片中 filters = append(filters, "class_id", 5) //分页查询古诗词 result, _ := models.NewsGetList(1, 6, filters...) //创建存储古诗词的切片,切片中元素类型为map类型,键为string类型,值空接口类型 list := make([]map[string]interface{}, len(result)) //遍历结果 for k, v := range result { //创建map row := make(map[string]interface{}) //添加信息 row["id"] = v.Id row["title"] = v.Title row["class_id"] = v.ClassId //如果缩略图片是否为空 if(string(v.Picurl) == "") { //生成一个[1,10)之间的数 var r = rand.Intn(16) //为缩略图赋值 v.Picurl = "/uploads/image/rand" + fmt.Sprintf("%d", r) + ".jpeg" //fmt.Println(v.Picurl) } //缩略图 row["picurl"] = v.Picurl //音频 row["media"] = v.Media //如果摘要不为空 if (v.Desc != "") { //将摘要强转为切片 nameRune := []rune(v.Desc) //获取切片的长度 lth := len(nameRune) //判断切片的长度是否大于30 if(lth > 30) { lth = 30 } //获取摘要的前30个字符 row["desc"] = string(nameRune[:lth]) } //作者编辑 row["author"] = v.Author //存入切片 list[k] = row } //创建存储过滤条件的切片 filters2 := make([]interface{}, 0) //将审核状态为1的过滤条件追加到切片中 filters2 = append(filters2, "status", 1) //将class_id=3(儿童古诗)的骡驴条件追加到切片中 filters2 = append(filters2, "class_id", 3) //分页查询 result2, _ := models.NewsGetList(1, 6, filters2...) //创建存储古诗词的切片,切片中元素类型为map类型,键为string类型,值空接口类型 list2 := make([]map[string]interface{}, len(result2)) //遍历结果 for k, v := range result2 { //创建map row2 := make(map[string]interface{}) //添加信息 row2["id"] = v.Id row2["title"] = v.Title row2["class_id"] = v.ClassId //如果缩略图片是否为空 if(string(v.Picurl) == "") { //随机生成[1,10)之间的整数 var r = rand.Intn(16) //为缩略图赋值 v.Picurl = "/uploads/image/rand" + fmt.Sprintf("%d", r) + ".jpeg" } //缩略图 row2["picurl"] = v.Picurl //音频 row2["media"] = v.Media //判断摘要是否为空 if (v.Desc != "") { //将摘要转换为切片 nameRune := []rune(v.Desc) //获取摘要的长度 lth := len(nameRune) //判断摘要的长度是否大于30 if(lth > 30) { lth = 30 } //摘要 row2["desc"] = string(nameRune[:lth]) } //作者编辑 row2["author"] = v.Author list2[k] = row2 } //创建存储过滤条件的切片 filters3 := make([]interface{}, 0) //将审核状态为1的过滤条件追加到切片中 filters3 = append(filters3, "status", 1) //将class_id=3(国学生活)的骡驴条件追加到切片中 filters3 = append(filters3, "class_id", 1) //分页查询 result3, _ := models.NewsGetList(1, 16, filters3...) //创建存储古诗词的切片,切片中元素类型为map类型,键为string类型,值空接口类型 list3 := make([]map[string]interface{}, len(result3)) for k, v := range result3 { //创建map row2 := make(map[string]interface{}) //添加信息 row2["id"] = v.Id row2["title"] = v.Title row2["class_id"] = v.ClassId //判断缩略图是否为空 if(string(v.Picurl) == "") { //随机生成[1,10)之间的整数 var r = rand.Intn(16) //为缩略图赋值 v.Picurl = "/uploads/image/rand" + fmt.Sprintf("%d", r) + ".jpeg" } //缩略图 row2["picurl"] = v.Picurl //音频 row2["media"] = v.Media //判断摘要是否为空 if (v.Desc != "") { //将摘要转换为切片 nameRune := []rune(v.Desc) //获取摘要的长度 lth := len(nameRune) //判断摘要的长度是否大于30 if(lth > 30) { lth = 30 } //摘要 row2["desc"] = string(nameRune[:lth]) } //作者编辑 row2["author"] = v.Author list3[k] = row2 } //创建存储过滤条件的切片 filters4 := make([]interface{}, 0) //将审核状态为1的过滤条件追加到切片中 filters4 = append(filters4, "status", 1) //将class_id=2(诗词古韵)的骡驴条件追加到切片中 filters4 = append(filters4, "class_id", 2) //分页查询 result4, _ := models.NewsGetList(1, 6, filters4...) fmt.Println("result4_length = ", len(result4)) //创建存储古诗词的切片,切片中元素类型为map类型,键为string类型,值空接口类型 list4 := make([]map[string]interface{}, len(result4)) //遍历结果 for k, v := range result4 { //创建map row2 := make(map[string]interface{}) //赋值 row2["id"] = v.Id row2["title"] = v.Title row2["class_id"] = v.ClassId //判断缩略图片是否为空 if(string(v.Picurl) == "") { //随机生成[1,10)之间的整数 var r = rand.Intn(16) //为缩略图赋值 v.Picurl = "/uploads/image/rand" + fmt.Sprintf("%d", r) + ".jpeg" } //缩略图 row2["picurl"] = v.Picurl //音频 row2["media"] = v.Media //判断摘要是否为空 if (v.Desc != "") { //将摘要转换为切片 nameRune := []rune(v.Desc) //获取摘要的长度 lth := len(nameRune) //判断摘要的长度是否大于30 if(lth > 30) { lth = 30 } //摘要 row2["desc"] = string(nameRune[:lth]) } //作者编辑 row2["author"] = v.Author list4[k] = row2 } //创建map,map中的每个元素都是一个分类 out := make(map[string]interface{}) out["list"] = list out["list2"] = list2 out["list3"] = list3 out["list4"] = list4 out["class_id"] = 0 self.Data["data"] = out self.Layout = "public/www_layout.html" self.display() }
学院 Go 语言视频主页
https://edu.csdn.net/lecturer/1928扫码获取海量视频及源码 QQ群:721929980
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Flash MX 2004游戏制作完全攻略
郭亮 / 中国电力出版社 / 2005-5 / 36.0
这是一本讲述Flash游戏编程的优秀教材。精美是数学图解,让您边读边看,兴致盎然;完整的游戏实例,让您边学边玩,趣味无穷;合理的章节规划,让您边学边练,轻松进阶……一起来看看 《Flash MX 2004游戏制作完全攻略》 这本书的介绍吧!