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

建站之星至尊版游戏代理平台哪个好

建站之星至尊版,游戏代理平台哪个好,做阅读任务挣钱的网站,建站网址导航一、业务介绍 1、有时候我们希望每次在数据的创建和更新的时候都保留当前操作人信息,最简单暴力的方式就是在每次创建的时候手动插入,在修改的时候手动的修改,这种方式可以实现,但是比较笨和费力2、也可以尝试使用gorm的钩子函数…

一、业务介绍

  • 1、有时候我们希望每次在数据的创建和更新的时候都保留当前操作人信息,最简单暴力的方式就是在每次创建的时候手动插入,在修改的时候手动的修改,这种方式可以实现,但是比较笨和费力
  • 2、也可以尝试使用gorm的钩子函数来实现这个功能,并且钩子函数要接收上下文参数,将本次接口请求的用户数据插入到对应的字段上

二、使用gorm自定义全局钩子来实现自动插入创建人、自动修改更新人操作

  • 1、创建一个文件实现接收上下文参数来实现自动插入数据,关于CreatedNameUpdatedName自己根据实际数据库字段修改

    package gormPlusimport "gorm.io/gorm"const UserIDKey string = "user_name"func BeforeCreate(db *gorm.DB) {if userName, ok := db.Statement.Context.Value(UserIDKey).(string); ok {// 多加这个判断主要是判断如果表字段有created_name的时候才会给这个字段赋值,没有也不影响if db.Statement.Schema.LookUpField("CreatedName") != nil {db.Statement.SetColumn("CreatedName", userName)}if db.Statement.Schema.LookUpField("UpdatedName") != nil {db.Statement.SetColumn("UpdatedName", userName)}}
    }func BeforeUpdate(db *gorm.DB) {if userName, ok := db.Statement.Context.Value(UserIDKey).(string); ok {if db.Statement.Schema.LookUpField("UpdatedName") != nil {db.Statement.SetColumn("UpdatedName", userName)}}
    }// RegisterAutoHooks 注册全局钩子
    func RegisterAutoHooks(db *gorm.DB) {db.Callback().Create().Before("gorm:before_create").Register("audit_hook:before_create", BeforeCreate)db.Callback().Update().Before("gorm:before_update").Register("audit_hook:before_update", BeforeUpdate)
    }
  • 2、全局挂载注册钩子函数

    sqlStr := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s","root","123456","localhost","3306","test2",
    )
    fmt.Println("数据库连接:", sqlStr)db, err := gorm.Open(mysql.Open(sqlStr), &gorm.Config{Logger:                                   logger.Default.LogMode(logger.Info),DisableForeignKeyConstraintWhenMigrating: true, // 自动创建表的时候不创建外键NamingStrategy: schema.NamingStrategy{ // 自动创建表时候表名的配置SingularTable: true,// 全部的表名前面加前缀//TablePrefix: "mall_",},
    })
    if err != nil {fmt.Println("打开数据库失败", err)panic("打开数据库失败" + err.Error())
    }// 注册创建人、更新人钩子
    gormPlus.RegisterAutoHooks(db)
    
  • 3、手动来验证

    type User2 struct {ID        int64  `gorm:"primaryKey"`Name      string `gorm:"size:255"`CreatedName int64  `gorm:"column:created_name"` // 创建人UpdatedName int64  `gorm:"column:updated_name"` // 更新人
    }
    
    ctx := context.WithValue(context.Background(), UserIDKey, "李四")// 插入数据
    user := User2{Name: "John Doe"}
    db.WithContext(ctx).Create(&user) // 自动填充 CreatedName = 李四, UpdatedName = 李四

二、结合gin项目操作

  • 1、在实际项目中操作人主要是从当前请求的token解析出操作人

  • 2、自定义一个函数来获取上下文的token,然后从redis中读取到数据

    func GetCtx(ctx *gin.Context) context.Context {token := ctx.GetHeader("token")fmt.Println(token, "当前token")// TODO 根据token获取用户名,这里假设用户名是adminreturn context.WithValue(context.Background(), gormPlus.UserIDKey, "admin")
    }
  • 3、在接口里面使用当前的上下文操作数据库

    package apiimport ("github.com/gin-gonic/gin""gorm.io/gorm""gorm_plus_gin/model""gorm_plus_gin/utils"
    )type IAccount interface {CreateAccountApi(ctx *gin.Context)     // 创建账号ModifyAccountByIdApi(ctx *gin.Context) // 根据id修改账号}type Account struct {db *gorm.DB
    }func (a Account) CreateAccountApi(ctx *gin.Context) {if err := a.db.WithContext(utils.GetCtx(ctx)).Create(&model.AccountEntity{Username: "test",}).Error; err != nil {utils.Fail(ctx, "创建账号失败")return}utils.Success(ctx, "创建账号成功")return
    }func (a Account) ModifyAccountByIdApi(ctx *gin.Context) {if err := a.db.WithContext(utils.GetCtx(ctx)).Model(&model.AccountEntity{}).Where("id = ?", 1).Update("Username", "莉莉丝").Error; err != nil {utils.Fail(ctx, "修改账号失败")return}utils.Success(ctx, "修改账号成功")
    }func NewIAccount(db *gorm.DB) IAccount {return Account{db: db,}
    }
http://www.dtcms.com/wzjs/380391.html

相关文章:

  • 微信设计网站建设网络搜索词排名
  • 青岛 生物类网站建设天津做网站的公司
  • 天元建设集团有限公司排名谷歌seo和百度seo区别
  • 百度站点提交工具百度收录的网站多久更新一次
  • 优质做网站哪家好厦门人才网个人会员
  • wordpress默认注册框安卓aso优化排名
  • 成都建站提供商深圳关键词优化公司哪家好
  • 太原做网站哪家公司好seo短视频发布页
  • 外贸网站推广方案网络推广网站排行榜
  • 网购网站建设怎么开通网站
  • 网络技术公司淮北seo
  • 成都网站建设scjsc888百度快速排名技术培训
  • 平潭做网站网站营销软文
  • 做百度推广这什么网站找客服的百度指数功能模块
  • 东莞网站优化方式开网店怎么推广运营
  • 郑州百度推广网站建设怎么做手工
  • 看到一个电商网站帮做淘宝全国疫情最新
  • 衡水网站建设的地方网站打开
  • 东莞哪些网络公司做网站比较好济南网站seo
  • 怎么用asp.net做网站app推广是什么工作
  • 手机制作钓鱼网站seo关键词排名优化报价
  • 松岗网站建设全国疫情的最新数据
  • 建网站权威公司bt磁力兔子引擎
  • 网站更新内容怎么做关键词优化是什么意思
  • .net core 做网站线上线下一体化营销
  • 厦门app网站建设网络营销方案设计毕业设计
  • 住房和城乡建设部网站政策发布祁阳seo
  • 西安网站制作模板如何写市场调研报告
  • 国内哪个推广网站做的好线上营销推广方案模板
  • 专业网站建设供应商广州aso优化