gin框架和gorm实现简单的个人博客(一)

首先说一下个人博客的需求

  1. 实现账户的注册和登录功能
  2. 实现对文章的增删改查

账户的注册和登录功能

首先连接数据库
在common包下创建一个database.go

package common

import (
	"boke/middleware"
	_ "github.com/jinzhu/gorm/dialects/mysql"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)

// models的初始化使用
var DB *gorm.DB


func InitDB() *gorm.DB {
	dsn := "root:qj251213`@tcp(127.0.0.1:3306)/test?charset=utf8mb4&parseTime=True&loc=Local"

	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
	if err != nil {
		panic("failed to connect database, err:" + err.Error())
	}

	//迁移
	db.AutoMigrate(&middleware.User{})
	db.AutoMigrate(&middleware.Passage{})

	DB = db

	return db

}

func GetDB() *gorm.DB{
	return DB
}

接着就是在数据库中创建一个表用来承接我们要创建的数据 创建一个middleware文件夹,创建user.go

package middleware

import (
	"gorm.io/gorm"
)

type User struct {
	//ID int `gorm:"primary_key" json:"id"`
	//CreatedOn int `json:"created_on"`
	//ModifiedOn int `json:"modified_on"`
	gorm.Model
	Name      string `gorm:"varchar(20);not null"`
	Telephone string `gorm:"varchar(20);not null;unique"`
	Password  string `gorm:"size:255;not null"`
}


然后再创建一个models文件夹创建models.go

注册

func Register(c *gin.Context){

	//获取初始化的数据库
	db := common.GetDB()

	// 获取参数
	var requestUser middleware.User

	c.Bind(&requestUser)
	name := requestUser.Name
	telephone := requestUser.Telephone
	password := requestUser.Password

	//数据验证
	if len(name) == 0 {
		c.JSON(http.StatusUnprocessableEntity, gin.H{
			"code":    422,
			"message": "用户名不能为空",
		})
		return
	}
	if len(telephone) != 11 {
		c.JSON(http.StatusUnprocessableEntity, gin.H{
			"code":    422,
			"message": "手机号必须为11位",
		})
		return
	}
	if len(password) < 6 {
		c.JSON(http.StatusUnprocessableEntity, gin.H{
			"code":    422,
			"message": "密码不能少于6位",
		})
		return
	}

	//判断手机号是否存在
	var user middleware.User
	db.Where("telephone = ?", telephone).First(&user)
	if user.ID != 0 {
		c.JSON(http.StatusUnprocessableEntity, gin.H{
			"code":    422,
			"message": "用户已存在",
		})
		return
	}

	//创建用户
	hasedPassword, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost)
	if err != nil {
		c.JSON(http.StatusUnprocessableEntity, gin.H{
			"code":    500,
			"message": "密码加密错误",
		})
		return
	}
	newUser := middleware.User{
		Name:      name,
		Telephone: telephone,
		Password:  string(hasedPassword),
	}
	db.Create(&newUser)

	//返回结果
	c.JSON(http.StatusOK, gin.H{
		"code":    200,
		"message": "注册成功",
	})
}

登录

func Login(c *gin.Context){

	db := common.GetDB()

	// 获取参数
	var requestUser middleware.User

	c.Bind(&requestUser)
	telephone := requestUser.Telephone
	password := requestUser.Password

	//数据验证
	if len(telephone) != 11 {
		c.JSON(http.StatusUnprocessableEntity, gin.H{
			"code":    422,
			"message": "手机号必须为11位",
		})
		return
	}
	if len(password) < 6 {
		c.JSON(http.StatusUnprocessableEntity, gin.H{
			"code":    422,
			"message": "密码不能少于6位",
		})
		return
	}

	//判断手机号是否存在
	var user middleware.User
	db.Where("telephone = ?", telephone).First(&user)
	if user.ID == 0 {
		c.JSON(http.StatusUnprocessableEntity, gin.H{
			"code":    422,
			"message": "用户不存在",
		})
		return
	}

	//判断密码是否正确
	if err := bcrypt.CompareHashAndPassword([]byte(user.Password), []byte(password)); err != nil {
		c.JSON(http.StatusUnprocessableEntity, gin.H{
			"code":    422,
			"message": "密码错误",
		})
	}

	//返回结果
	c.JSON(http.StatusOK, gin.H{
		"code":    200,
		"message": "登录成功",
	})
}

然后创建一个routers文件夹,创建一个router.go 文件,用来连接路由package routers

package routers

import (
	"boke/models"
	"github.com/gin-gonic/gin"
)

func CollectRoutes(r *gin.Engine) *gin.Engine{

	//注册
	r.POST("/register", models.Register)

	// 登录
	r.POST("/login", models.Login)

	return r

}

创建main.go

package main

import (
	"boke/common"
	"boke/routers"
	"fmt"
	"github.com/gin-gonic/gin"
)

func main() {

	//获取初始化的数据库
	db :=common.InitDB()
    fmt.Println(db)

	r := gin.Default()

	// 启动路由
	routers.CollectRoutes(r)

	//在9090端口启动服务
	panic(r.Run(":8000"))

}


这样登录和注册功能就实现了

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值