golang写的一个抽奖系统 权限用的jwt 可以后台配置 (供学习使用 windows , mac ,linux双击使用 自动创建数据库) - Go语言中文社区

golang写的一个抽奖系统 权限用的jwt 可以后台配置 (供学习使用 windows , mac ,linux双击使用 自动创建数据库)


1)目录结构

在这里插入图片描述

2)配置文件

  • app.conf 支持多环境 配置
appname = draw
httpport = 8080
runmode = local
sessionon = true
debug = true

[local]
httpport = 8088
jwt_key = jlimigyangaosdkoaiojiwe
autorender = true
tokenExt = 7200

[dev]
httpport = 8080
jwt_key = sdfsdgdfg?we1e2342sdfsf
autorender = true
tokenExt = 7200

[prod]
httpport = 80
jwt_key = qweqweqweqwsdadgredfge
autorender = true
tokenExt = 7200

include "db.ini"
  • db.ini
[local]
mysqlaliasname = default
mysqldrivername = mysql
mysqluser = lmy
mysqlpass = wdful165177
mysqlurls = www.item1024.com
mysqldb = db_draw
mysqlport = 3306
tbprefix = t_
sqldebug = true
[dev]
mysqlaliasname = default
mysqldrivername = mysql
mysqluser = root
mysqlpass = root
mysqlurls = 127.0.0.1
mysqldb = db_draw
mysqlport = 3306
tbprefix = t_
sqldebug = true

[prod]
mysqlaliasname = default
mysqldrivername = mysql
mysqluser = root
mysqlpass = 165177
mysqlurls = 127.0.0.1
mysqldb = db_draw
mysqlport = 3306
tbprefix = t_
sqldebug = false

3)过滤器和日志设置

package main

import (
	"encoding/json"
	"github.com/astaxie/beego"
	"github.com/astaxie/beego/context"
	"github.com/astaxie/beego/orm"
	_ "github.com/astaxie/beego/orm"
	_ "github.com/go-sql-driver/mysql"
	"item1024.com/draw/constants"
	_ "item1024.com/draw/routers"
	"item1024.com/draw/structs"
	"item1024.com/draw/utils"
	"strings"
	"time"
)

func init() {
	beego.BConfig.WebConfig.Session.SessionCookieLifeTime = 999999999
	//连接数据库
	database := beego.AppConfig.String("mysqldb")
	dburl := beego.AppConfig.String("mysqlurls") + ":" + beego.AppConfig.String("mysqlport")
	dbalias := beego.AppConfig.String("mysqlaliasname")
	dbdrivername := beego.AppConfig.String("mysqldrivername")
	dbuser := beego.AppConfig.String("mysqluser")
	dbapassword := beego.AppConfig.String("mysqlpass")
	sqlDebug, error := beego.AppConfig.Bool("sqldebug")
	println(error)
	println("runmode:" + beego.AppConfig.String("runmode") + "--connect db:" + database + "--url:" + dburl)
	orm.RegisterDriver("mysql", orm.DRMySQL)
	orm.RegisterDataBase(dbalias, dbdrivername, dbuser+":"+dbapassword+"@tcp("+dburl+")/"+database+"?charset=utf8")
	orm.Debug = sqlDebug
	// create table
	orm.RunSyncdb(dbalias, false, true)
	orm.DefaultTimeLoc = time.UTC
	//log
	beego.SetLogger("log", `{"filename":"logs/draw.log"}`)
	beego.BeeLogger.DelLogger("log")
	beego.SetLevel(beego.LevelDebug)
	beego.SetLogFuncCall(true)
	//filter
	beego.InsertFilter("/auth/api/*", beego.BeforeExec, FilterUser, true)
	beego.InsertFilter("/auth/page/*", beego.BeforeExec, FilterPage, true)
}

func main() {
	//beego.SetStaticPath("/web","views")
	beego.Run()

}

//过滤用户权限返回json
var FilterUser = func(ctx *context.Context) {
	println("auth filter init...")
	res := structs.Response{500, constants.AUTH_VER_FAIL, nil}
	msg, err := json.Marshal(res)
	if err != nil {
		ctx.ResponseWriter.Write(msg)
	} else {
		token := ctx.Request.Header.Get("auth")
		if !strings.Contains(token, ".") {
			ctx.ResponseWriter.Write(msg)
		} else {
			custom := utils.CheckToken(token)
			if custom == nil {
				ctx.ResponseWriter.Write(msg)
			} else {
				ctx.Input.SetParam("userId", custom.UserId)
				ctx.Input.SetParam("userName", custom.UserName)
			}
		}
	}
}

//过滤用户权限返回权限页面
var FilterPage = func(ctx *context.Context) {
	token := ctx.Request.Header.Get("auth")
	if !strings.Contains(token, ".") {
		ctx.Redirect(302, "/login")
	} else {
		custom := utils.CheckToken(token)
		if custom == nil {
			ctx.Redirect(302, "/login")
		} else {
			ctx.Input.SetParam("userId", custom.UserId)
			ctx.Input.SetParam("userName", custom.UserName)
		}
	}
}

3)自动建表需要注册model

package models

import (
	"github.com/astaxie/beego"
	"github.com/astaxie/beego/orm"
)

/**
初始化model
*/

func init() {
	// 需要在 init 中注册定义的 model
	orm.RegisterModelWithPrefix(beego.AppConfig.String("tbprefix"), new(UserToken), new(UserBase), new(DrawConfig), new(DrawRecord))
}

4)控制器和模型就不说了 看看路由设置

package routers

import (
	"github.com/astaxie/beego"
	"item1024.com/draw/controllers"
)

func init() {
	beego.Router("/", &controllers.MainController{}, "get:Login")
	beego.Router("/login.page", &controllers.MainController{}, "get:Login")
	beego.Router("/registe.page", &controllers.MainController{}, "get:Registe")
	beego.Router("/draw_set.page", &controllers.MainController{}, "get:DrawSet")
	beego.Router("/draw_list.page", &controllers.MainController{}, "get:DrawList")
	beego.Router("/draw.page", &controllers.MainController{}, "get:Draw")

	beego.Router("/token/addToken.py", &controllers.TokenController{}, "get:CreateToken")
	beego.Router("/user/registe.py", &controllers.UserController{}, "post:UserRegiste")
	beego.Router("/user/login.py", &controllers.UserController{}, "post:UserLogin")
	beego.Router("/user/exit.py", &controllers.UserController{}, "get:Exit")

	beego.Router("/auth/api/saveDrawConfig", &controllers.DrawController{}, "post:SaveDrawConfig")
	beego.Router("/auth/api/queryDraw", &controllers.DrawController{}, "post:QueryDraw")
	beego.Router("/auth/api/updateNameById", &controllers.DrawController{}, "post:UpdateNameById")
	beego.Router("/auth/api/deleteById", &controllers.DrawController{}, "post:DeleteById")
	beego.Router("/auth/api/saveDraw", &controllers.DrawController{}, "post:SaveDraw")
	beego.Router("/auth/api/queryDrawRecord", &controllers.DrawController{}, "post:QueryDrawRecord")

}

5)源代码编译

  • 对应各种环境打包哦~ 下面是三种环境的打包方式
bee pack -be GOOS=linux
bee pack -be GOOS=darwin
bee pack -be GOOS=windows

打包linux运行文件

在这里插入图片描述

打包mac运行文件

在这里插入图片描述

打包windows运行文件

在这里插入图片描述

打出来的包

在这里插入图片描述

  • 有一个mac的 因为名字相同被覆盖了

5)启动项目

  • 安装一个mysql 安装方式自行百度 安装好后 创建一个db_draw数据库 在db.ini配置用户名和密码 数据库 项目启动就可以自动建表
    我的是windows 直接双击运行exe的程序
    在这里插入图片描述
    访问localhost:8080
    在这里插入图片描述

没登陆账号就去注册
在这里插入图片描述授权密钥生成 调用http://localhost:8080//token/addToken.py生成如图:
在这里插入图片描述
生成的密钥在这里查看 status为1的是未使用:
在这里插入图片描述

把这个新的token复制到注册授权密钥使用即可注册成功

6) 项目使用

配置页面

在这里插入图片描述

随便配置一个抽奖人数

在这里插入图片描述

配置姓名

在这里插入图片描述

配置好后 点击进入抽奖

在这里插入图片描述

抽奖完成

在这里插入图片描述

查看中奖名单

在这里插入图片描述

仅用来学习beego写的demo… 供大家学习使用

源代码地址

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_28114645/article/details/87693991
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-02-02 17:56:40
  • 阅读 ( 2239 )
  • 分类:数据库

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢