当前位置: 首页 > news >正文

网站介绍ppt怎么做网站换dns

网站介绍ppt怎么做,网站换dns,大前端d8扁平化wordpress模板,怎么做好邯郸网站建设引言 在现代 Web 开发中,Go 语言以其高效、简洁和并发性能优异而受到广泛欢迎。Gin 是 Go 生态中最受欢迎的轻量级 Web 框架之一,它提供了高性能的路由、中间件支持以及灵活的 API 设计能力。本文将介绍如何使用 Gin 构建一个完整的博客系统,…

引言


在现代 Web 开发中,Go 语言以其高效、简洁和并发性能优异而受到广泛欢迎。Gin 是 Go 生态中最受欢迎的轻量级 Web 框架之一,它提供了高性能的路由、中间件支持以及灵活的 API 设计能力。本文将介绍如何使用 Gin 构建一个完整的博客系统,并结合 GORM 实现数据库操作,使用 JWT 实现用户认证。

bolg入门教程-github地址

项目结构
为了提高代码的可维护性和模块化程度,我们将整个项目分为以下几个核心模块:
main.go:主程序入口,负责初始化数据库连接并启动 HTTP 服务器。
models/:存放数据模型,包括用户(User)、文章(Post)和评论(Comment)。
database/:负责数据库的初始化与连接管理。
handlers/:处理所有 HTTP 请求逻辑。
middleware/:实现 JWT 认证中间件。

数据库设计


我们使用 GORM 作为 ORM 工具来简化数据库操作。以下是三个主要的数据模型:


User 用户模型

type User struct {gorm.ModelUsername string `gorm:"unique;not null"`Password string `gorm:"not null"`
}

用户表包含用户名和密码字段,其中用户名是唯一的且不能为空。密码通过 bcrypt 加密存储

Post 文章模型 

type Post struct {gorm.ModelTitle   string `gorm:"not null"`Content string `gorm:"not null"`UserID  uint
}

每篇文章都属于一个用户,通过 UserID 建立外键关联。

Comment 评论模型

type Comment struct {gorm.ModelContent string `gorm:"not null"`UserID  uintPostID  uint
}

评论表记录评论内容、所属用户和对应的文章。

数据库连接与初始化


我们在 database/db.go 中封装了数据库的连接和初始化逻辑:

var DB *gorm.DBfunc InitDB() {var err errorDB, err = gorm.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/bolg?charset=utf8mb4&parseTime=True&loc=Local")if err != nil {panic("failed to connect database")}DB.AutoMigrate(&models.User{}, &models.Post{}, &models.Comment{})
}

这段代码实现了以下功能:
使用 GORM 连接 MySQL 数据库。
自动创建或更新数据表结构。
将数据库连接对象保存到全局变量 DB 中,供其他模块调用。

路由与业务逻辑


在 handlers/handlers.go 中,我们定义了所有的业务逻辑,包括用户注册、登录、文章发布、评论等操作。


用户注册

func RegisterUser(db *gorm.DB) gin.HandlerFunc {return func(c *gin.Context) {var user models.Userif err := c.ShouldBindJSON(&user); err != nil {c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})return}if err := user.SetPassword(c.PostForm("password")); err != nil {c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to set password"})return}db.Create(&user)c.JSON(http.StatusCreated, gin.H{"message": "User registered successfully"})}
}

该函数接收 JSON 格式的用户注册请求,验证输入后加密密码并保存到数据库。


用户登录

func LoginUser(db *gorm.DB) gin.HandlerFunc {return func(c *gin.Context) {var user models.Userusername := c.PostForm("username")password := c.PostForm("password")if err := db.Where("username = ?", username).First(&user).Error; err != nil {c.JSON(http.StatusUnauthorized, gin.H{"error": "Invalid credentials"})return}if !user.CheckPassword(password) {c.JSON(http.StatusUnauthorized, gin.H{"error": "Invalid credentials"})return}token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{"user_id": user.ID,"exp":     time.Now().Add(time.Hour * 24).Unix(),})tokenString, err := token.SignedString([]byte("your-secret-key"))if err != nil {c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to generate token"})return}c.JSON(http.StatusOK, gin.H{"token": tokenString})}
}

登录成功后,生成 JWT Token 并返回给客户端,不了解jwt的可以看我上篇博客go引入jwt

创建文章

func CreatePost(c *gin.Context) {userID := c.GetUint("user_id")var post models.Postif err := c.ShouldBindJSON(&post); err != nil {c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})return}post.UserID = userIDif err := db.Create(&post).Error; err != nil {c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to create post"})return}c.JSON(http.StatusCreated, gin.H{"message": "Post created successfully", "post": post})
}

该函数会从上下文中获取当前用户的 ID,并将其设置为文章的作者。

认证中间件


我们使用 JWT 来实现用户身份验证,在 middleware/auth.go 中定义了一个中间件:

func AuthMiddleware() gin.HandlerFunc {return func(c *gin.Context) {tokenString := c.GetHeader("Authorization")if tokenString == "" {c.JSON(http.StatusUnauthorized, gin.H{"error": "Missing authorization token"})c.Abort()return}token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) {return []byte("your-secret-key"), nil})if err != nil || !token.Valid {c.JSON(http.StatusUnauthorized, gin.H{"error": "Invalid token"})c.Abort()return}claims := token.Claims.(jwt.MapClaims)userID := uint(claims["user_id"].(float64))c.Set("user_id", userID)c.Next()}
}

该中间件会在每次请求时验证 JWT Token 的有效性,并将用户 ID 存储在上下文中,供后续处理函数使用。

总结


本项目展示了如何使用 Gin 和 GORM 构建一个功能完善的博客系统。通过模块化的代码结构,我们实现了清晰的职责划分和良好的扩展性。JWT 的引入使得用户认证更加安全可靠,同时也为后续的功能扩展打下了基础。
如果你对该项目感兴趣,可以继续扩展以下功能:
分页查询文章列表
支持 Markdown 编辑器
添加文章分类与标签
实现点赞、收藏等社交功能
希望这篇技术博客能帮助你更好地理解 Gin 和 GORM 的使用,并激发你在 Web 开发领域的灵感!

http://www.dtcms.com/a/522905.html

相关文章:

  • 工具刷网站排刷排名软件棋牌app开发多少钱
  • 杭州竞彩网站开发山东一建建设有限公司网站首页
  • 2017网站开发主流工具怎么优化关键词
  • 行业门户网站制作台州集团网站建设
  • 怎么样进行网络推广扬州外贸网站seo
  • 网站主页面设计多少钱教育行业网站
  • 上海网站建设哪家做得好天网站建设
  • 网站建设和推广做设计在哪个网站接单
  • 天津创思佳网络网站制作公司湖北专升本网站建设
  • c 做网站源码实例国内设计师个人网页
  • 网站平台建设需要多少钱网页设计居中代码
  • 网站建设需要摊销吗找工作58同城最新招聘附近
  • 工程建设资质单位网站电商网站建设代理商
  • 网站首页设计有限公司淘宝客网站都用什么做
  • 蒙阴网站建设中天建设集团有限公司怎么样
  • 做网站需要学jq吗财经网站模板
  • 中山cms建站ui网页界面设计素材
  • 安徽省工程建设信用平台网站贵州网站备案查询
  • 化工网站建设价格微信客户端小程序
  • 设计网站大全扣西湖南岚鸿首选做博客和做网站
  • 网站官网域名服务费岳池住房和城乡建设厅网站
  • 做网站的合同wordpress返回插件
  • 温州网站制作系统响应式网站背景
  • 天水 网站建设招聘泉州做网站优化价格
  • 门户网站 开发语言WordPress众筹网站主题
  • hexo做网站seo神马网站推广器
  • 网站开发课程有哪些网站更换内容
  • 做网站用小型机或服务器给人做网站
  • 网站建设过程小结共享网站的建设与规划
  • 网站买空间网站开发与系统开发