Beego框架:古诗网站前台实现

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010986776/article/details/84141715

#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
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/u010986776/article/details/84141715
今日推荐