gin和grom实现简单个人博客

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

实现账户的注册和登录功能

实现对文章的增删改查

账户的注册和登录功能

首先连接数据库

在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.gopackage 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

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)

//在8000端口启动服务

panic(r.Run(":8000"))

}`

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容