从零开始Gin Web+Vue商城的搭建(二)-- Model设计和ORM框架

网上搜的都比较浅显,咱们继续上一节从底层一步步往起搭。
大概可以分成这么几个部分:
1.Model设计和ORM框架
2.session和用户模块
3.商城首页信息和购物车模块
4.商品详情页(商品点赞和评论)
5.订单管理模块
6.商品秒杀模块
7.api调用控制模块
8.缓存

一、前端首页搭建
我比较喜欢先把前台搭出来。能看着个页面做东西才有思路。
从资源站上随便拔下来一个商城页面做demo。
(http://www.jq22.com/demo/BootstrapMoban201805062107/index.html)
右键另存为本地,全都不用改,把Vue框架里的index.html代码替换一下,资源文件夹放进去,直接启动就好。

二、用户Model
借鉴一下老哥的文档(https://www.cnblogs.com/suimei/p/6066645.html)
先建立三张表:用户表,用户详情表 ,用户授权表。
usermodel添加详情和授权表的字段,在gorm同步时会创建外键,如何定义类型在官方文档中也有介绍
(http://gorm.book.jasperxu.com/models.html#md)

//UserModel.go
package Model

import (
    "time"

    "github.com/jinzhu/gorm"
)

type UserModel struct {
    gorm.Model           //继承
    UId           string `gorm:"primary_key"` //Guid
    UserName      string
    Avatar        string           //头像
    Locked        int              //是否锁定
    LastVisitTime time.Time        //最后登录时间
    RegisterTime  time.Time        //注册时间
    Details       UserDetailModel  // One-To-One
    Auths         []UserAuthsModel // One-To-Many
}
type UserDetailModel struct {
    UId      string `gorm:"primary_key"` //Guid
    Gender   string //性别
    RealName string //真实姓名
    Email    string
    //以后再说
}
type UserAuthsModel struct {
    AuthsID      int    `gorm:"primary_key"` //授权记录 自增就好
    UId          string //Guid
    IdentityType string //登录类型:手机 邮箱 用户名 或第三方
    Identifier   string //标识:手机 邮箱 用户名或第三方的唯一标识
    Credential   string //密码凭证:密码或TOKEN
}

三、定义Model时使用了gorm框架,所以在main函数中也需要初始化一下gorm。

//main.go
func main() {
    router := gin.Default()
    RouterInit(router)
    Helper.Dbinit()
    router.Run(":8081")
}
//GormHelper.go
package Helper

import (
    "../../GinMall/Model"
    "github.com/jinzhu/gorm"
    _ "github.com/jinzhu/gorm/dialects/mysql"
)

func Dbinit() *gorm.DB {
    db := NewConn()
    //SetMaxOpenConns用于设置最大打开的连接数
    //SetMaxIdleConns用于设置闲置的连接数
    db.DB().SetMaxIdleConns(10)
    db.DB().SetMaxOpenConns(100)

    // 启用Logger,显示详细日志
    db.LogMode(true)

    // 自动迁移模式
    db.AutoMigrate(&Model.UserModel{},
        &Model.UserDetailModel{},
        &Model.UserAuthsModel{},
    )
    return db
}
func NewConn() *gorm.DB {
    db, err := gorm.Open("mysql", "root:我的密码@/goweb?charset=utf8&parseTime=True&loc=Local")
    if err != nil {
        panic("连接数据库失败:" + err.Error())
    }
    return db
}

查了一下Go好像没有直接生成Guid的包,不过还好找到了现成代码。

//GuidHelper.go
package Helper

import (
    "crypto/md5"
    "crypto/rand"
    "encoding/base64"
    "encoding/hex"
    "io"
)

//生成32位md5字串
func GetMd5String(s string) string {
    h := md5.New()
    h.Write([]byte(s))
    return hex.EncodeToString(h.Sum(nil))
}

//生成Guid字串
func NewGuid() string {
    b := make([]byte, 48)

    if _, err := io.ReadFull(rand.Reader, b); err != nil {
        return ""
    }
    return GetMd5String(base64.URLEncoding.EncodeToString(b))
}

你可能感兴趣的:(从零开始Gin Web+Vue商城的搭建(二)-- Model设计和ORM框架)