Go Web——简单blog项目(完整代码)


技术

web框架:Gin
数据库: MySQL 
MySQL操作:Gorm

目录结构

├─  .gitignore
│  go.mod // 项目依赖
│  go.sum
│  main.go //主程序
│          
├─assets // 静态资源
	├─css
	├─js
	├─editormd		
├─controller // 项目控制器
	controller.go
├─dao // 数据库访问
	dao.go
├─router // 路由
	router.go
├─model // 生成数据库的结构体
	model.go
├─templates // 模板文件
	detail.html
	header.html
	index.html
	login.html
	post.html
	postIndex.html
	regiter.html

controller

controller\controller.go:

package controller

import (
	"blog/dao"
	"blog/model"
	"fmt"
	"html/template"
	"log"
	"strconv"

	"github.com/gin-gonic/gin"
	"github.com/russross/blackfriday/v2"
)

func RegisterUser(c *gin.Context) {
   
	username := c.PostForm("username")
	password := c.PostForm("password")

	user := model.User{
   
		Username: username,
		Password: password,
	}

	dao.Mgr.RegisterUser(&user)

	c.Redirect(301, "/")
}

func GoRegister(c *gin.Context) {
   
	c.HTML(200, "register.html", nil)
}

func Login(c *gin.Context) {
   
	username := c.PostForm("username")
	password := c.PostForm("password")
	fmt.Println(username)

	u := dao.Mgr.Login(username)

	if u.Username == "" {
   
		c.HTML(200, "login.html", "用户名不存在")
		fmt.Println("用户名不存在")
	} else {
   
		if u.Password != password {
   
			c.HTML(200, "login.html", "密码错误")
			fmt.Println("密码错误")
		} else {
   
			c.Redirect(301, "/")
			fmt.Println("登陆成功")
		}
	}
}

func GoLogin(c *gin.Context) {
   
	c.HTML(200, "login.html", nil)
}

func Index(c *gin.Context) {
   
	c.HTML(200, "index.html", nil)
}

func ListUser(c *gin.Context) {
   
	c.HTML(200, "userlist.html", nil)
}

// 操作博客
// 获取博客列表
func GetPostIndex(c *gin.Context) {
   
	posts := dao.Mgr.GetAllPost()
	c.HTML(200, "postIndex.html", posts)
}

// 添加博客
func AddPost(c *gin.Context) {
   
	title := c.PostForm("title")
	tag := c.PostForm("tag")
	content := c.PostForm("content")

	post := model.Post{
   
		Title:   title,
		Tag:     tag,
		Content: content,
	}

	dao.Mgr.AddPost(&post)

	c.Redirect(302, "/post_index")
}

// 跳转到添加博客
func GoAddPost(c *gin.Context) {
   
	c.HTML(200, "post.html", nil)
}

// 显示博客详细
func PostDetail(c *gin.Context) {
   
	s := c.Query("pid")

	pid, err := strconv.Atoi(s)
	if err != nil {
   
		log.Fatal(err)
	}

	p := dao.Mgr.GetPost(pid)

	content := blackfriday.Run([]byte(p.Content)) // blackfriday库:将markdown格式转化成html格式

	c.HTML(200, "detail.html", gin.H{
   
		"Title":   p.Title,
		"Content": template.HTML(content),
	})
}

dao

dao\dao.go:

package dao

import (
	"blog/model"
	"log"

	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)

type Manager interface {
   
	RegisterUser(user *model.User)
	Login(username string) model.User

	// 博客操作
	AddPost(post *model.Post)   // 添加博客
	GetAllPost() []model.Post   // 获取多个博客
	GetPost(pid int) model.Post // 获取单个博客
}

type manager struct {
   
	db *gorm.DB
}

var Mgr Manager

func init() {
   
	dsn := "root:960690@tcp(127.0.0.1:3306)/golang_db?charset=utf8mb4&parseTime=True&loc=Local"
	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
   })
	if err != nil {
   
		log.Fatal("Failed to init db:", err)
	}

	Mgr = &manager{
   db: db}
	db.AutoMigrate(&model.User{
   })
	db.AutoMigrate(&model.Post{
   })
}

func (mgr *manager) RegisterUser(user *model.User) {
   
	mgr.db.Create(user)
}

func (mgr *manager) Login(username string) model.User {
   
	var user model.User
	mgr.db.Where("username=?", username).First(&user)
	return user
}

// 博客操作
func (mgr *manager) AddPost(post *model.Post) {
   
	mgr.db.Create(post)
}

func (mgr *manager) GetAllPost(
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值