listview
This commit is contained in:
		
							
								
								
									
										134
									
								
								bin/main.go
									
									
									
									
									
								
							
							
						
						
									
										134
									
								
								bin/main.go
									
									
									
									
									
								
							@@ -45,12 +45,19 @@ type Image struct {
 | 
				
			|||||||
	UpdateTime time.Time `json:"update_time"`
 | 
						UpdateTime time.Time `json:"update_time"`
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type Images struct {
 | 
					type Tag struct {
 | 
				
			||||||
 | 
						Id         int       `json:"id"`
 | 
				
			||||||
 | 
						Name       string    `json:"name"`
 | 
				
			||||||
 | 
						CreateTime time.Time `json:"create_time"`
 | 
				
			||||||
 | 
						UpdateTime time.Time `json:"update_time"`
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type ListView struct {
 | 
				
			||||||
	Page     int           `json:"page"`
 | 
						Page     int           `json:"page"`
 | 
				
			||||||
	PageSize int           `json:"page_size"`
 | 
						PageSize int           `json:"page_size"`
 | 
				
			||||||
	Total    int           `json:"total"`
 | 
						Total    int           `json:"total"`
 | 
				
			||||||
	Next     bool          `json:"next"`
 | 
						Next     bool          `json:"next"`
 | 
				
			||||||
	List     []Image `json:"list"`
 | 
						List     []interface{} `json:"list"`
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func main() {
 | 
					func main() {
 | 
				
			||||||
@@ -59,6 +66,127 @@ func main() {
 | 
				
			|||||||
	var mysqlConnection models.MysqlConnection
 | 
						var mysqlConnection models.MysqlConnection
 | 
				
			||||||
	mysqlConnection.Init()
 | 
						mysqlConnection.Init()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// 获取标签列表
 | 
				
			||||||
 | 
						http.HandleFunc("/tags", func(w http.ResponseWriter, r *http.Request) {
 | 
				
			||||||
 | 
							defer LogComponent(time.Now().UnixNano(), r) // 最后打印日志
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// 标签的原理
 | 
				
			||||||
 | 
							// 1. 通过文章的 tag 字段, 获取所有的标签
 | 
				
			||||||
 | 
							// 2. 通过标签的 id, 获取标签的名称
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// 热门权重指数的标签排序
 | 
				
			||||||
 | 
							// 1. 标签的权重指数 = (标签的文章数 * 标签的文章数) * 近期增幅
 | 
				
			||||||
 | 
							// 2. 标签的近期增幅 = (标签的文章数 - 标签的文章数) / 标签的文章数
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// 标签是一个虚拟表, ORC 提取的数据都带有多个维度的比重概率(分布概率, 对比度概率, 文字大小, 文字重量, 词频概率, 词性概率, 词长概率, 词序概率)
 | 
				
			||||||
 | 
							// 经过规则过滤后, 用动态调参的指数计算乘积作为权重, 权重仍达到某个阈值的数据才会被视为标签
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// 获取查询条件(忽略空值), 超级简洁写法
 | 
				
			||||||
 | 
							QueryConditions := func(key string) (list []string) {
 | 
				
			||||||
 | 
								if r.FormValue(key) != "" {
 | 
				
			||||||
 | 
									list = strings.Split(r.FormValue(key), ",")
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								return
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// 拼接查询条件, 超级简洁写法
 | 
				
			||||||
 | 
							conditions := ""
 | 
				
			||||||
 | 
							if authors := QueryConditions("authors"); len(authors) > 0 {
 | 
				
			||||||
 | 
								conditions += fmt.Sprintf(" AND author IN (%s)", strings.Join(authors, ","))
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if tags := QueryConditions("tags"); len(tags) > 0 {
 | 
				
			||||||
 | 
								conditions += fmt.Sprintf(" AND tag IN (%s)", strings.Join(tags, ","))
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if categories := QueryConditions("categories"); len(categories) > 0 {
 | 
				
			||||||
 | 
								conditions += fmt.Sprintf(" AND categorie IN (%s)", strings.Join(categories, ","))
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// 打印web_tags表的所有字段
 | 
				
			||||||
 | 
							rows, err := mysqlConnection.Database.Query("SELECT * FROM web_tags LIMIT 1")
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								log.Println(err)
 | 
				
			||||||
 | 
								return
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							defer rows.Close()
 | 
				
			||||||
 | 
							for rows.Next() {
 | 
				
			||||||
 | 
								// 获取字段名
 | 
				
			||||||
 | 
								columns, err := rows.Columns()
 | 
				
			||||||
 | 
								if err != nil {
 | 
				
			||||||
 | 
									log.Println(err)
 | 
				
			||||||
 | 
									continue
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								// 获取字段值
 | 
				
			||||||
 | 
								values := make([]interface{}, len(columns))
 | 
				
			||||||
 | 
								for i := range values {
 | 
				
			||||||
 | 
									values[i] = new(interface{})
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								if err := rows.Scan(values...); err != nil {
 | 
				
			||||||
 | 
									log.Println(err)
 | 
				
			||||||
 | 
									continue
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								// 打印字段名和字段值
 | 
				
			||||||
 | 
								for i, column := range columns {
 | 
				
			||||||
 | 
									log.Println(column, *(values[i].(*interface{})))
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if err := rows.Err(); err != nil {
 | 
				
			||||||
 | 
								log.Println(err)
 | 
				
			||||||
 | 
								return
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// 打印web_tags表的总数
 | 
				
			||||||
 | 
							var total int
 | 
				
			||||||
 | 
							if err := mysqlConnection.Database.QueryRow("SELECT COUNT(*) FROM web_tags").Scan(&total); err != nil {
 | 
				
			||||||
 | 
								log.Println(err)
 | 
				
			||||||
 | 
								return
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							log.Println("total", total)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							/**
 | 
				
			||||||
 | 
									// 获取标签列表
 | 
				
			||||||
 | 
									var tags ListView
 | 
				
			||||||
 | 
									tags.Page, tags.PageSize = stringToInt(r.FormValue("page"), 1), stringToInt(r.FormValue("pageSize"), 10)
 | 
				
			||||||
 | 
									rows, err := mysqlConnection.Database.Query("SELECT id, name, update_time, create_time FROM web_tags"+conditions+" ORDER BY id DESC LIMIT ?, ?", (tags.Page-1)*tags.PageSize, tags.PageSize)
 | 
				
			||||||
 | 
									if err != nil {
 | 
				
			||||||
 | 
										log.Println(err)
 | 
				
			||||||
 | 
										return
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									defer rows.Close()
 | 
				
			||||||
 | 
									for rows.Next() {
 | 
				
			||||||
 | 
										var tag Tag
 | 
				
			||||||
 | 
										if err := rows.Scan(&tag.Id, &tag.Name, &tag.UpdateTime, &tag.CreateTime); err != nil {
 | 
				
			||||||
 | 
											log.Println(err)
 | 
				
			||||||
 | 
											continue
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
										tags.List = append(tags.List, tag)
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									if err := rows.Err(); err != nil {
 | 
				
			||||||
 | 
										log.Println(err)
 | 
				
			||||||
 | 
										return
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									// 获取总数
 | 
				
			||||||
 | 
									if err := mysqlConnection.Database.QueryRow("SELECT COUNT(*) FROM web_tags" + conditions).Scan(&tags.Total); err != nil {
 | 
				
			||||||
 | 
										log.Println(err)
 | 
				
			||||||
 | 
										return
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									// 是否有下一页
 | 
				
			||||||
 | 
									tags.Next = tags.Total > tags.Page*tags.PageSize
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									// 将对象转换为有缩进的JSON输出
 | 
				
			||||||
 | 
									json, err := json.MarshalIndent(tags, "", "    ")
 | 
				
			||||||
 | 
									if err != nil {
 | 
				
			||||||
 | 
										log.Println(err)
 | 
				
			||||||
 | 
										return
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									// 输出JSON
 | 
				
			||||||
 | 
									w.Header().Set("Content-Type", "application/json")
 | 
				
			||||||
 | 
									w.Write(json)
 | 
				
			||||||
 | 
							**/
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// 获取图片信息列表(分页)
 | 
						// 获取图片信息列表(分页)
 | 
				
			||||||
	http.HandleFunc("/images", func(w http.ResponseWriter, r *http.Request) {
 | 
						http.HandleFunc("/images", func(w http.ResponseWriter, r *http.Request) {
 | 
				
			||||||
		defer LogComponent(time.Now().UnixNano(), r) // 最后打印日志
 | 
							defer LogComponent(time.Now().UnixNano(), r) // 最后打印日志
 | 
				
			||||||
@@ -100,7 +228,7 @@ func main() {
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// 获取图片列表
 | 
							// 获取图片列表
 | 
				
			||||||
		var images Images
 | 
							var images ListView
 | 
				
			||||||
		images.Page, images.PageSize = stringToInt(r.URL.Query().Get("page"), 1), stringToInt(r.URL.Query().Get("pageSize"), 10)
 | 
							images.Page, images.PageSize = stringToInt(r.URL.Query().Get("page"), 1), stringToInt(r.URL.Query().Get("pageSize"), 10)
 | 
				
			||||||
		rows, err := mysqlConnection.Database.Query("SELECT id, content, update_time, create_time FROM web_images"+conditions+" LIMIT ?, ?", (images.Page-1)*images.PageSize, images.PageSize)
 | 
							rows, err := mysqlConnection.Database.Query("SELECT id, content, update_time, create_time FROM web_images"+conditions+" LIMIT ?, ?", (images.Page-1)*images.PageSize, images.PageSize)
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user