古詩網站前臺實現

尹成發表於2018-11-14

#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
在這裡插入圖片描述

相關文章