美文网首页gin从零开始Gin Web+Vue商城的搭建
从零开始Gin Web+Vue商城的搭建(二)-- Model设

从零开始Gin Web+Vue商城的搭建(二)-- Model设

作者: 魔改谢馒头 | 来源:发表于2018-08-19 16:58 被阅读138次

    网上搜的都比较浅显,咱们继续上一节从底层一步步往起搭。
    大概可以分成这么几个部分:
    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设

        本文链接:https://www.haomeiwen.com/subject/vxmciftx.html