文章目录

  • 开发前的准备
  • 需求分析
  • 项目截图
  • 代码

开发前的准备

需要集成markdown编辑器
下载地址

需求分析

1.能够实现用户的注册与登录
2.能够编写并保存博客
3.能够对保存的博客进行展示

项目截图


代码

main.go

package mainimport "blog/router"func main() {router.Start()
}

controller.go

package controllerimport ("blog/dao""blog/model""fmt""github.com/gin-gonic/gin"
)func Register(c *gin.Context) {username := c.PostForm("username")password := c.PostForm("password")user := model.User{Username: username,Password: password,}dao.Mgr.Register(&user)c.Redirect(301, "/")
}func Index(c *gin.Context) {c.HTML(200, "index.html", nil)
}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", "用户名不存在")} else {if u.Password != password {c.HTML(200, "login.html", "密码错误")} else {c.Redirect(301, "/")}}
}func GoLogin(c *gin.Context) {c.HTML(200, "login.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)
}

dao.go

package daoimport ("blog/model""fmt"_ "github.com/go-sql-driver/mysql""github.com/jmoiron/sqlx""log"
)type Manager interface {Register(user *model.User)Login(username string) model.UserAddPost(post *model.Post)GetAllPost() []model.PostgetPost(topic string) []model.Post
}type manager struct {db *sqlx.DB
}var (Mgr Manager
)func init() {dsn := "root:******@tcp(127.0.0.1:3306)/blog_db"conn, err := sqlx.Open("mysql", dsn)if err != nil {log.Fatal("open database failed,err:", err)return}Mgr = &manager{db: conn,}
}func (m *manager) Register(user *model.User) {sqlStr := "insert into user(Username,Password) values(?,?)"_, err := m.db.Exec(sqlStr, user.Username, user.Password)if err != nil {fmt.Println("add user failed,err:", err)return}
}func (m *manager) Login(username string) model.User {var user []model.Usererr := m.db.Select(&user, "select Username,Password from user where username=?", username)if err != nil {fmt.Println("query username failed,err:", err)}return user[0]
}func (m *manager) AddPost(post *model.Post) {_, err := m.db.Exec("insert  into blog(Title,Content,Tag) values (?,?,?)", post.Title, post.Content, post.Tag)if err != nil {fmt.Println("insert into blog failed,err:", err)return}
}func (m *manager) GetAllPost() []model.Post {var posts = make([]model.Post, 10)m.db.Select(&posts, "select * from blog")return posts
}func (m *manager) getPost(title string) []model.Post {var posts []model.Postm.db.Select(&posts, "select * from blog where Topic = ?", title)return posts
}

model.go

package modeltype User struct {Username string `db:"Username"`Password string `db:"Password"`
}
type Post struct {Title   string `db:"Title"`Content string `db:"Content"`Tag     string `db:"Tag"`
}

header.html


{{define "header"}}
<header class="p-3 bg-dark text-white"><div class="container"><div class="d-flex flex-wrap align-items-center justify-content-center justify-content-lg-start"><a class="navbar-brand" href="#">zyj的博客</a><a href="/" class="d-flex align-items-center mb-2 mb-lg-0 text-white text-decoration-none"><svg class="bi me-2" width="40" height="32" role="img" aria-label="Bootstrap"><use xlink:href="#bootstrap"></use></svg></a><ul class="nav col-12 col-lg-auto me-lg-auto mb-2 justify-content-center mb-md-0"><li><a href="/" class="nav-link px-2 text-secondary">首页</a></li><li><a href="/post" class="nav-link px-2 text-white">博客</a></li></ul><div class="text-end"><a type="button" href="/login" class="btn btn-outline-light me-2">登录</a><a type="button" href="/register" class="btn btn-warning">注册</a></div></div></div>
</header>{{end}}

index.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1.0"><link rel="stylesheet" href="/assets/css/bootstrap.min.css"><link rel="stylesheet" href="/assets/editor/css/editormd.min.css"><script src="/assets/js/bootstrap.min.js"></script><title>Title</title>
</head>
<body><div class="container">{{template "header"}}<div id="test-editor"><textarea style="display:none;">### 关于 Editor.md</textarea></div><script src="https://cdn.bootcss.com/jquery/1.11.3/jquery.min.js"></script><script src="/assets/editor/editormd.min.js"></script><script type="text/javascript">$(function() {var editor = editormd("test-editor", {width  : "100%",height : "640",path   : "assets/editor/lib/"});});</script></div>
</body>
</html>

post.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width",initial-scale="1.0"><link rel="stylesheet" href="/assets/css/bootstrap.min.css"><link rel="stylesheet" href="/assets/editor/css/editormd.css"><script src="/assets/js/bootstrap.min.js"></script><title>添加博客</title>
</head>
<body><div class="container">{{template "header"}}<form action="/post" method="post"><div class="row"><div class="col-md-8"><div id="test-editor"><textarea style="display: none;" name="context"></textarea></div></div><div class="col-md-4 mt-3"><label for="title" class="form-label">请输入标题</label><input type="text" name="title" class="form-control" id="title"><br><label for="tag" class="form-label">请输入标签</label><input type="text" name="tag" class="form-control" id="tag"><br><button for="submit" class="btn btn-primary">添加</button></div></div></form></div><script src="https://cdn.bootcss.com/jquery/1.11.3/jquery.min.js"></script>
<script src="/assets/editor/editormd.min.js"></script>
<script type="text/javascript">$(function() {var editor = editormd("test-editor", {width  : "100%",height : "640",path   : "assets/editor/lib/"});});
</script></body>
</html>

postIndex.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><link rel="stylesheet" href="/assets/css/bootstrap.min.css"><title>博客列表</title>
</head>
<body>
<div class="container">{{template "header"}}<div class="row mt-3">{{range $post:=. -}}<div class="col-md-6"><div class="row g-0 border rounded overflow-hidden flex-md-row mb-4 shadow-sm h-md-250 position-relative"><div class="col p-4 d-flex flex-column position-static"><strong class="d-inline-block mb-2 text-primary">分类</strong><h3 class="mb-0">{{$post.Title}}</h3><div class="mb-1 text-muted">Nov 12</div><p class="card-text mb-auto">{{$post.Content}}</p><a href="#" class="stretched-link">...</a></div><div class="col-auto d-none d-lg-block"><svg class="bd-placeholder-img" width="200" height="250" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Placeholder: Thumbnail" preserveAspectRatio="xMidYMid slice" focusable="false"><title>Placeholder</title><rect width="100%" height="100%" fill="#55595c"></rect><text x="50%" y="50%" fill="#eceeef" dy=".3em">博客封面</text></svg></div></div></div>{{- end}}</div></div></body>
</html>

register.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1.0"><link rel="stylesheet" href="/assets/css/bootstrap.min.css"><script src="/assets/js/bootstrap.min.js"></script><title>注册</title>
</head>
<body>
<div class="container">{{template "header"}}<form method="post" action="/register"><div class="mb-3"><label for="exampleInputEmail1" class="form-label">用户名称</label><input type="text" name="username" class="form-control" id="exampleInputEmail1" aria-describedby="emailHelp"></div><div class="mb-3"><label for="exampleInputPassword1" class="form-label">用户密码</label><input type="password" name="password" class="form-control" id="exampleInputPassword1"></div><div class="mb-3"><label for="exampleInputPassword2" class="form-label">确认密码</label><input type="password" name="password2" class="form-control" id="exampleInputPassword2"></div><button type="submit" class="btn btn-primary">注册</button></form></div>
</body>
</html>

golang入门项目——Gin框架简易博客系统1.0相关推荐

  1. 【全栈】vue3.0 + golang 尝试前后端分离【博客系统1.0】开发

    1. 效果图 背景:想在自己的vps上搭建一个个人博客系统,之前自己用宝塔+WordPress 搭建过一个不过  还是想自己用golang做个真正属于自己的博客系统,于是就有了标题所述.... 2. ...

  2. 重磅回归-SSM整合进阶项目实战之个人博客系统

    历经一个多月的重新设计,需求分析以及前后端开发,终于有了一定的输出:我自己实现的spring4+springmvc+mybatis3整合的进阶项目实战-个人博客系统 已然完成了,系统采用mvc三层模式 ...

  3. python入门指南bl-Python Flask开源博客系统Bl

    本博文在51CTO技术博客首发. 开源不易,Python良心之作,真心送给广大朋友,恳请给予支持,不胜感激! 大家可以从下面的地址中去体验Blog_mini的功能,我把副本部署在了腾讯云上供大家使用: ...

  4. Vue、Node全栈项目~面向小白的博客系统~

    个人博客系统 前言 ❝ 代码质量问题轻点喷(去年才学的前端),有啥建议欢迎联系我,联系方式见最下方,感谢! 页面有啥bug也可以反馈给我,感谢! 这是一套包含前后端代码的个人博客系统,欢迎各位提出建议 ...

  5. Java项目:朴素风个人博客系统(前后端分离+java+vue+Springboot+ssm+mysql+maven+redis)

    源码获取:博客首页 "资源" 里下载! 一.项目简述 本系统功能包括: 基于vue + Springboo痼J后端分离项目个人博客系统,注册 登录,首页展示,喜爰图书展示,后台图书 ...

  6. 用PHP完成简易博客系统

    因为项目需要简单的完成一个页面接收参数并且操作数据库的过程,在老师的指引下决定通过一个博客小项目加深自己的理解. 学习路线是用一天的时间大概熟悉了HTML和PHP的语法,然后结合一些视频课程和相关博客 ...

  7. 【Java项目】构建一个博客系统

    这篇博客介绍的是一个简单的前端博客系统!!! 该项目主要分成以下四个页面 博客列表页:显示了当前发布出来的博客(标题.时间.内容) 博客编辑页:包括一个输入框,Markdown编辑器(使用第三方组件) ...

  8. 四、Java多人博客系统-2.0版本

    由于时间关系,多人博客系统这里穿插一个2.0版本. 2.0版本本来是打算用于建立个人网站,但是后来发现个人建站需要购买域名服务器,还需要备案,很繁琐.最终放弃.完成此版本,最终也只是作为技术演练.此版 ...

  9. 印记博客IBO博客系统 v2.0.2源码

    简介: IBO博客系统是一个基于 SpringBoot/MongoDB 的博客系统.IBO形容的是印记:印记博客.想必大家都希望自己的博客记录自己所想,留有所念,留下胜过的印记. 博客特性: 支持Ma ...

最新文章

  1. Jmeter连接MySQL数据库
  2. Mac 安装md5sum等
  3. ORA-29786: SIHA attribute GET failed with error
  4. JVM调优: 转载JVM调优总结
  5. 利用UDP19端口实施DOS攻击的真实案例
  6. 无代码iVX编程实现简单跳跃超级玛丽游戏
  7. c++ udp通信_Web 通信协议,你还需要知道:SPDY 和 QUIC
  8. Qt文档阅读笔记-QML RotationAnimation官方解析及实例
  9. java对多态的理解_对于Java中多态的理解
  10. linux---拷贝文件夹命令
  11. 面试过 3000 位候选人,我发现混得好的年轻人都有这 3 个特质
  12. C# 控制台、接口、窗体使用BarTender打印标签 (亲测可用)
  13. 弹窗动画PopupWindow
  14. 论文阅读 Neural Network Modeling of Nonlinear Systems Based on Volterra Series Extension of a Linear Mod
  15. 手机数据网络慢怎么修改服务器,手机网速慢怎么回事 这三种方法可以一试
  16. CDN: trunk URL couldn‘t be downloaded的解决办法
  17. 基于MODIS数据的滁州市冬小麦长势遥感监测研究
  18. 唯有卡拉特拉瓦,才敢让建筑飞起来!
  19. python生成word目录_Python 文件与目录操作方法总结
  20. windows7 64位安装oracle10g

热门文章

  1. 对话 | 港科大教授权龙:为什么三维重建才是计算机视觉的灵魂?
  2. docker 下声卡无法连接
  3. 计蒜客 蒜头君学英语
  4. 口碑订购会员营销网页无法打开,提示网页可能暂时无法连接
  5. JAVA高级阶段知识点总结
  6. HTML——疑难杂症总结
  7. 当医学影像遇上深度学习 | 影像数据类型一览
  8. hust 1546 hdu 3911 Black And White
  9. 完全集成的云备份和还原服务——NetApp Cloud Backup
  10. ABB紧凑式组架并联电容器组QBank