去年默认配置。

This commit is contained in:
2026-07-22 18:02:05 +08:00
parent aab3aeb5b2
commit 8d0b75e484
7 changed files with 43 additions and 76 deletions
-39
View File
@@ -1,7 +1,6 @@
package config
import (
"fmt"
"log/slog"
"os"
"strconv"
@@ -133,41 +132,3 @@ func getEnv(key, defaultValue string) string {
}
return defaultValue
}
// CreateDefaultConfig 创建默认配置文件
func CreateDefaultConfig() error {
configDir := "./config"
if _, err := os.Stat(configDir); os.IsNotExist(err) {
if err := os.MkdirAll(configDir, 0755); err != nil {
return fmt.Errorf("创建配置目录失败: %w", err)
}
}
configPath := configDir + "/config.yaml"
if _, err := os.Stat(configPath); err == nil {
return nil // 配置文件已存在
}
defaultConfig := `# GoBlog 配置文件
server:
port: 8080
mode: debug # debug 或 release
database:
driver: sqlite # sqlite 或 mysql
dsn: goblog.db # SQLite文件路径或MySQL DSN
app:
name: GoBlog
description: 一个简洁的个人博客
author: Admin
theme: default # 主题名称
`
if err := os.WriteFile(configPath, []byte(defaultConfig), 0644); err != nil {
return fmt.Errorf("创建配置文件失败: %w", err)
}
slog.Info("已创建默认配置文件", "file", configPath)
return nil
}
+2 -24
View File
@@ -3,7 +3,7 @@ package database
import (
"goblog/config"
"goblog/models"
"log"
"log/slog"
"github.com/glebarez/sqlite"
"gorm.io/gorm"
@@ -36,28 +36,6 @@ func Init(cfg *config.DatabaseConfig) error {
return err
}
log.Println("数据库连接成功")
return nil
}
// 创建默认管理员
func CreateDefaultAdmin() error {
var count int64
DB.Model(&models.User{}).Where("role = ?", "admin").Count(&count)
if count == 0 {
admin := &models.User{
Username: "admin",
Password: "$2a$10$XrrWkDB.DIpuXOYYrMiZdOBpl0gxrtziSCQ4OOnGFP10C8.xF30qq", // admin123
Nickname: "管理员",
Email: "admin@example.com",
Role: "admin",
Status: 1,
}
if err := DB.Create(admin).Error; err != nil {
return err
}
log.Println("默认管理员创建成功,用户名: admin,密码: admin123")
}
slog.Info("数据库连接成功")
return nil
}
BIN
View File
Binary file not shown.
+5
View File
@@ -77,6 +77,11 @@ func GetPosts(c *gin.Context) {
db = db.Where("category_id = ?", query.CategoryID)
}
userId, exists := c.Get("userID")
if exists {
db = db.Where("author_id = ?", userId)
}
if query.TagID > 0 {
db = db.Joins("JOIN post_tags ON post_tags.post_id = posts.id").
Where("post_tags.tag_id = ?", query.TagID)
+6
View File
@@ -76,6 +76,12 @@ func IndexView(c *gin.Context) {
db := database.DB.Model(&models.Post{}).Preload("Category").Preload("Tags").Preload("Author").
Where("status = ?", "published")
userId, exists := c.Get("userID")
userId, exists = 1, true
if exists {
db = db.Or("author_id = ?", userId)
}
if categoryID > 0 {
db = db.Where("category_id = ?", categoryID)
}
-11
View File
@@ -13,11 +13,6 @@ import (
)
func main() {
// 创建默认配置文件(如果不存在)
if err := config.CreateDefaultConfig(); err != nil {
slog.Error("创建默认配置文件失败", "error", err)
}
// 加载配置
cfg := config.Load()
@@ -43,12 +38,6 @@ func main() {
os.Exit(1)
}
// 创建默认管理员
if err := database.CreateDefaultAdmin(); err != nil {
slog.Error("创建默认管理员失败", "error", err)
os.Exit(1)
}
// 从数据库读取主题设置,如果不存在则使用配置文件中的值
theme := cfg.App.Theme
var option models.Option
+30 -2
View File
@@ -4,6 +4,7 @@ import (
"fmt"
"html/template"
"net/http"
"path/filepath"
"sync"
"github.com/gin-gonic/gin/render"
@@ -84,16 +85,43 @@ func (r *TemplateRenderer) Reload(theme string) {
func (r *TemplateRenderer) reload(theme string) {
templateDir := "templates/" + theme
// 需要独立渲染的页面模板
pages := []string{"index", "post", "page"}
// 收集主题目录下的公共局部模板(例如 sidebar/header/footer),
// 这些模板通过 {{template "xxx" .}} 被 base.html 引用,
// 必须与页面模板一起解析,否则渲染时会因模板未定义而失败(白屏)。
partials := []string{}
if matches, err := filepath.Glob(templateDir + "/*.html"); err == nil {
for _, f := range matches {
base := filepath.Base(f)
if base == "base.html" {
continue
}
name := base[:len(base)-len(".html")]
isPage := false
for _, p := range pages {
if p == name {
isPage = true
break
}
}
if !isPage {
partials = append(partials, f)
}
}
}
// 为每个页面创建独立的模板组合
pages := []string{"index", "post", "page", "sidebar"}
newTemplates := make(map[string]*template.Template)
for _, pageName := range pages {
// 只加载 base.html 和对应的页面模板
// 加载 base.html、对应页面模板以及所有公共局部模板
allFiles := []string{
templateDir + "/base.html",
templateDir + "/" + pageName + ".html",
}
allFiles = append(allFiles, partials...)
// 解析模板文件
tmpl, err := template.New("").Funcs(templateFuncs()).ParseFiles(allFiles...)