This commit is contained in:
qaq
2025-07-02 23:11:07 +08:00
parent 94e01ae63b
commit f1cab0563a
16 changed files with 388 additions and 0 deletions
BIN
View File
Binary file not shown.
+96
View File
@@ -0,0 +1,96 @@
package common
import (
"database/sql"
"fmt"
"log"
_ "github.com/mattn/go-sqlite3"
)
var DB *sql.DB
// InitDatabase 初始化sqlite3数据库
func InitDatabase() error {
var err error
DB, err = sql.Open("sqlite3", "data.db")
if err != nil {
return fmt.Errorf("连接数据库失败: %v", err)
}
if err = DB.Ping(); err != nil {
return fmt.Errorf("数据库连接测试失败: %v", err)
}
// 创建表结构
if err = createTables(); err != nil {
return fmt.Errorf("创建表结构失败: %v", err)
}
return nil
}
// createTables 创建表结构
func createTables() error {
tables := []string{
`CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username VARCHAR(100) NOT NULL UNIQUE,
password VARCHAR(100) NOT NULL,
email VARCHAR(100),
is_active BOOLEAN NOT NULL DEFAULT 1
)`,
}
for _, table := range tables {
if _, err := DB.Exec(table); err != nil {
return err
}
}
// 创建默认管理员用户
//createDefaultUser()
fmt.Println("✅ 数据库表创建完成")
return nil
}
// createDefaultUser 创建默认管理员用户
func createDefaultUser() {
var count int
err := DB.QueryRow("SELECT COUNT(*) FROM users").Scan(&count)
if err != nil || count > 0 {
return
}
// 插入默认管理员用户
_, err = DB.Exec(`INSERT INTO users (username, password, email, is_active)
VALUES (?, ?, ?, ?)`,
"admin", "123456", "admin@example.com", true)
if err != nil {
log.Printf("创建默认用户失败: %v", err)
} else {
fmt.Println("✅ 创建默认管理员用户成功")
}
}
// Insert 插入数据
func Insert(sql string, args ...interface{}) (sql.Result, error) {
return DB.Exec(sql, args...)
}
// Update 更新数据
func Update(sql string, args ...interface{}) (sql.Result, error) {
return DB.Exec(sql, args...)
}
// Delete 删除数据
func Delete(sql string, args ...interface{}) (sql.Result, error) {
return DB.Exec(sql, args...)
}
// Select 查询数据
func Select(sql string, args ...interface{}) (*sql.Rows, error) {
return DB.Query(sql, args...)
}
+1
View File
@@ -0,0 +1 @@
package common
+8
View File
@@ -0,0 +1,8 @@
package common
type ResponseResult struct {
Code int64 `json:"code"`
Success bool `json:"success"`
Message string `json:"message"`
Data interface{} `json:"data"`
}
+1
View File
@@ -0,0 +1 @@
package common
+11
View File
@@ -0,0 +1,11 @@
appname = beego-backend
httpport = 8080
runmode = dev
autorender = false
copyrequestbody = true
EnableDocs = true
# 数据库配置
db_type = sqlite3
db_conn = data.db
db_debug = true
@@ -0,0 +1,30 @@
package controllers
import (
"encoding/json"
"github.com/beego/beego/v2/server/web"
"net/http"
)
type BaseController struct {
web.Controller
}
func (c *BaseController) ServeJSON() {
c.Ctx.Output.Header("Content-Type", "application/json; charset=utf-8")
var err error
data := c.Data["json"]
encoder := json.NewEncoder(c.Ctx.Output.Context.ResponseWriter)
encoder.SetEscapeHTML(false)
encoder.SetIndent("", " ")
err = encoder.Encode(data)
if err != nil {
http.Error(c.Ctx.Output.Context.ResponseWriter, err.Error(), http.StatusInternalServerError)
return
}
}
@@ -0,0 +1,32 @@
package controllers
import (
"beego-backend/common"
"beego-backend/models/users"
"encoding/json"
"fmt"
)
type LoginController struct {
BaseController
}
// @router /login_by_pwd [post]
func (c *LoginController) LoginByPwd() {
var Data users.LoginModel
err := json.Unmarshal(c.Ctx.Input.RequestBody, &Data)
if err != nil {
Result := common.ResponseResult{
Code: -1,
Success: false,
Message: fmt.Sprintf("系统异常:%v", err.Error()),
Data: nil,
}
c.Data["json"] = &Result
c.ServeJSON()
return
}
result := users.LoginByPassword(Data)
c.Data["json"] = &result
c.ServeJSON()
}
+28
View File
@@ -0,0 +1,28 @@
module beego-backend
go 1.24
require (
github.com/beego/beego/v2 v2.3.8
github.com/mattn/go-sqlite3 v1.14.28
)
require (
github.com/beorn7/perks v1.0.1 // indirect
github.com/cespare/xxhash/v2 v2.2.0 // indirect
github.com/hashicorp/golang-lru v0.5.4 // indirect
github.com/kr/text v0.2.0 // indirect
github.com/mitchellh/mapstructure v1.5.0 // indirect
github.com/prometheus/client_golang v1.19.0 // indirect
github.com/prometheus/client_model v0.5.0 // indirect
github.com/prometheus/common v0.48.0 // indirect
github.com/prometheus/procfs v0.12.0 // indirect
github.com/shiena/ansicolor v0.0.0-20200904210342-c7312218db18 // indirect
github.com/valyala/bytebufferpool v1.0.0 // indirect
golang.org/x/crypto v0.24.0 // indirect
golang.org/x/net v0.23.0 // indirect
golang.org/x/sys v0.21.0 // indirect
golang.org/x/text v0.16.0 // indirect
google.golang.org/protobuf v1.34.2 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
+59
View File
@@ -0,0 +1,59 @@
filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA=
filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4=
github.com/beego/beego/v2 v2.3.8 h1:wplhB1pF4TxR+2SS4PUej8eDoH4xGfxuHfS7wAk9VBc=
github.com/beego/beego/v2 v2.3.8/go.mod h1:8vl9+RrXqvodrl9C8yivX1e6le6deCK6RWeq8R7gTTg=
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/elazarl/go-bindata-assetfs v1.0.1 h1:m0kkaHRKEu7tUIUFVwhGGGYClXvyl4RE03qmvRTNfbw=
github.com/elazarl/go-bindata-assetfs v1.0.1/go.mod h1:v+YaWX3bdea5J/mo8dSETolEo7R71Vk1u8bnjau5yw4=
github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y=
github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg=
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc=
github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/mattn/go-sqlite3 v1.14.28 h1:ThEiQrnbtumT+QMknw63Befp/ce/nUPgBPMlRFEum7A=
github.com/mattn/go-sqlite3 v1.14.28/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y=
github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU=
github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k=
github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw=
github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI=
github.com/prometheus/common v0.48.0 h1:QO8U2CdOzSn1BBsmXJXduaaW+dY/5QLjfB8svtSzKKE=
github.com/prometheus/common v0.48.0/go.mod h1:0/KsvlIEfPQCQ5I2iNSAWKPZziNCvRs5EC6ILDTlAPc=
github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=
github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog=
github.com/shiena/ansicolor v0.0.0-20200904210342-c7312218db18 h1:DAYUYH5869yV94zvCES9F51oYtN5oGlwjxJJz7ZCnik=
github.com/shiena/ansicolor v0.0.0-20200904210342-c7312218db18/go.mod h1:nkxAfR/5quYxwPZhyDxgasBMnRtBZd0FCEpawpjMUFg=
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
golang.org/x/crypto v0.24.0 h1:mnl8DM0o513X8fdIkmyFE/5hTYxbwYOjDS/+rK6qpRI=
golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM=
golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs=
golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws=
golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4=
golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI=
google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg=
google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+25
View File
@@ -0,0 +1,25 @@
package main
import (
"log"
"beego-backend/common"
"beego-backend/middleware"
_ "beego-backend/routers"
"github.com/beego/beego/v2/server/web"
)
func main() {
// 初始化数据库封装
err := common.InitDatabase()
if err != nil {
log.Fatalf("❌ 数据库初始化失败: %v", err)
}
// 中间件
web.InsertFilter("/*", web.BeforeRouter, middleware.BaseAuth)
// 启动服务器
web.Run()
}
+20
View File
@@ -0,0 +1,20 @@
package middleware
import (
"github.com/beego/beego/v2/server/web/context"
)
var BaseAuth = func(ctx *context.Context) {
//secret := ctx.Input.Query("secret")
//if secret == "" {
// resp := common.ResponseResult{
// Code: -1,
// Success: false,
// Message: "数据库链接失败",
// Data: nil,
// }
// ctx.Output.JSON(resp, false, false)
// ctx.Abort(403, "")
//}
}
+15
View File
@@ -0,0 +1,15 @@
package users
import (
"beego-backend/common"
)
func LoginByPassword(data LoginModel) common.ResponseResult {
return common.ResponseResult{
Code: 0,
Success: true,
Message: "success",
Data: nil,
}
}
+14
View File
@@ -0,0 +1,14 @@
package users
type UserModel struct {
ID int `json:"id"`
Username string `json:"username"`
Password string `json:"password"`
Email string `json:"email"`
IsActive bool `json:"is_active"`
}
type LoginModel struct {
Username string `json:"username"`
Password string `json:"password"`
}
+19
View File
@@ -0,0 +1,19 @@
package routers
import (
beego "github.com/beego/beego/v2/server/web"
"github.com/beego/beego/v2/server/web/context/param"
)
func init() {
beego.GlobalControllerRouter["beego-backend/controllers:LoginController"] = append(beego.GlobalControllerRouter["beego-backend/controllers:LoginController"],
beego.ControllerComments{
Method: "LoginByPwd",
Router: `/login_by_pwd`,
AllowHTTPMethods: []string{"post"},
MethodParams: param.Make(),
Filters: nil,
Params: nil})
}
+29
View File
@@ -0,0 +1,29 @@
package routers
import (
"beego-backend/controllers"
"github.com/beego/beego/v2/server/web"
"github.com/beego/beego/v2/server/web/context"
)
func init() {
web.InsertFilter("*", web.BeforeRouter, func(ctx *context.Context) {
ctx.Output.Header("Access-Control-Allow-Origin", "*")
ctx.Output.Header("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE")
ctx.Output.Header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, token")
if ctx.Input.Method() == "OPTIONS" {
ctx.Output.SetStatus(200)
ctx.ResponseWriter.WriteHeader(200)
return
}
})
ns := web.NewNamespace("/api/v1/",
web.NSNamespace("/login",
web.NSInclude(
&controllers.LoginController{},
),
),
)
web.AddNamespace(ns)
}