使用GoAdmin極速搭建golang應用管理後臺

GoAdmin介紹

GoAdmin是一個基於golang的數據可視化後臺搭建框架,內置了管理後臺的rbac權限系統,登陸以及一個crud邏輯與視圖生成的插件。支持不一樣主題更換,支持添加插件形式添加不一樣應用進行功能擴展。mysql

官網:https://www.go-admin.cn
github地址:https://github.com/GoAdminGroup
在線demo:https://demo.go-admin.cn
文檔地址:https://book.go-admin.cn/zhlinux

上手

這裏直接實戰介紹如何上手,最小化的實現一個真實應用的數據管理後臺。我從github搜索到了這樣一個golang的web例子:eddycjy/go-gin-example,咱們以這個簡單例子爲例來搭建這個應用的管理後臺。git

準備工做

第一步

首先,把這個應用的sql導入進數據庫:github

截屏2020-03-31下午2.43.16.png

第二步

接着咱們安裝一下GoAdmin的命令行工具:golang

GO111MODULE=on GOPROXY=https://goproxy.cn go install github.com/GoAdminGroup/go-admin/adm

注意:這裏使用了go module的方式加載依賴,不瞭解go module的話先百度一下。同時設置了代理,加快依賴的下載。web

安裝完後,你應該能夠在mac或linux的終端或windows的cmd成功執行如下命令:sql

> adm -V
GoAdmin CLI v1.2.7

注意:若是不成功,檢查一下你是否有將$GOPATH/bin這個路徑加入到你的環境變量路徑中,若是你不知道什麼是環境變量路徑能夠百度一下先,再進行後面步驟數據庫

第三步

導入GoAdmin所需的sql文件進數據庫中。windows

截屏2020-03-31下午4.03.12.png

到這裏準備工做完畢,開始寫代碼。bash

生成數據模型文件

咱們在任意位置建立咱們的項目文件夾,好比叫:go-gin-example-admin,而後進入文件夾中,執行如下命令:

> adm generate

接着會出現幾個菜單,首先讓你選擇數據庫驅動,咱們用的是mysql,所以選擇mysql,按回車進行選擇。

? choose a driver  [Use arrows to move, type to filter, enter to select]
> mysql
  postgresql
  sqlite
  mssql

而後咱們填寫好對應的數據信息:

? choose a driver mysql
? sql address 127.0.0.1
? sql port 3306
? sql username root
? sql password ****
? sql database name gin-example-blogs

接着選擇要管理的表格,咱們按空格選擇所有,而後回車:

? choose table to generate  [Use arrows to move, space to select, type to filter]
> [x]  [select all]
  [ ]  blog_article
  [ ]  blog_auth
  [ ]  blog_tag

接着設置好文件的包名,數據模型文件的對應數據庫鏈接名(默認是default)按回車便可,以及輸出路徑,咱們都直接回車使用默認值。

? set package name main
? set connection name default
? set file output path ./

而後就能夠看到在文件夾下生成了幾個文件:

.
├── tables.go
├── blog_article.go
├── blog_auth.go
└── blog_tag.go

編寫main.go

生成完數據模型文件後,咱們在文件夾下建立main.go,內容以下:

package main

import (
    _ "github.com/GoAdminGroup/go-admin/adapter/gin"               // 適配器
    _ "github.com/GoAdminGroup/go-admin/modules/db/drivers/mysql" // sql 驅動
    _ "github.com/GoAdminGroup/themes/adminlte"                    // ui主題

    "github.com/GoAdminGroup/go-admin/engine"
    "github.com/GoAdminGroup/go-admin/examples/datamodel"
    "github.com/GoAdminGroup/go-admin/modules/config"
    "github.com/GoAdminGroup/go-admin/modules/db"
    "github.com/GoAdminGroup/go-admin/modules/language"
    "github.com/GoAdminGroup/go-admin/template"
    "github.com/GoAdminGroup/go-admin/template/chartjs"
    "github.com/gin-gonic/gin"
    "io/ioutil"
)

func main() {
    r := gin.Default()

    gin.SetMode(gin.ReleaseMode)
    gin.DefaultWriter = ioutil.Discard

    eng := engine.Default()

    template.AddComp(chartjs.NewChart())

    if err := eng.AddConfig(config.Config{
        Databases: config.DatabaseList{
            "default": {
                Host:       "127.0.0.1",
                Port:       "3306",
                User:       "root",
                Pwd:        "root",
                Name:       "gin-example-blogs",
                MaxIdleCon: 50,
                MaxOpenCon: 150,
                Driver:     db.DriverMysql,
            },
        },
        UrlPrefix: "admin",
        IndexUrl:  "/",
        Debug:     true,
        Language:  language.CN,
    }).
        AddGenerators(Generators).
        Use(r); err != nil {
        panic(err)
    }

    r.Static("/uploads", "./uploads")

    eng.HTML("GET", "/admin", datamodel.GetContent)

    _ = r.Run(":9033")
}

這裏簡單的解釋一下:咱們實例化了一個GoAdmin引擎對象eng,而後調用AddConfig方法傳入配置,而後使用AddGenerators方法傳入數據模型文件,接着調用Use掛載到gin框架上面。

如今咱們嘗試運行一下:

> go run .

[GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.

[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
 - using env:   export GIN_MODE=release
 - using code:  gin.SetMode(gin.ReleaseMode)

GoAdmin is now running.
Running in "debug" mode. Switch to "release" mode in production.

看到GoAdmin is now running意味着運行成功了,接着咱們訪問一下:http://localhost:9033/admin/login

能夠看到已經運行起來:

截屏2020-03-31下午3.36.02.png

默認帳號密碼都是:admin

設置菜單與介紹數據模型文件

登陸進去後,訪問菜單設置頁,咱們須要設置一下菜單,才能從菜單進入咱們的表格管理頁面。這時咱們須要看一下咱們文件夾下的tables.go文件。

package main

import "github.com/GoAdminGroup/go-admin/plugins/admin/modules/table"

// The key of Generators is the prefix of table info url.
// The corresponding value is the Form and Table data.
//
// http://{{config.Domain}}:{{Port}}/{{config.Prefix}}/info/{{key}}
//
// example:
//
// "blog_article" => http://localhost:9033/admin/info/blog_article
// "blog_auth" => http://localhost:9033/admin/info/blog_auth
// "blog_tag" => http://localhost:9033/admin/info/blog_tag
//
// example end
//
var Generators = map[string]table.Generator{
    "blog_article": GetBlogArticleTable,
    "blog_auth":    GetBlogAuthTable,
    "blog_tag":     GetBlogTagTable,

    // generators end
}

這個文件聲明瞭一個map變量,這個變量的key是咱們數據表管理路由的前綴,對應的值就是咱們的數據模型生成函數。因此咱們明白了,咱們菜單須要設置的地址:

截屏2020-03-31下午3.56.14.png

新建完成對應的幾個菜單後,咱們強制刷新一下頁面,就能夠看到左邊已經出現了對應的菜單:

截屏2020-03-31下午3.42.39.png

咱們點博客用戶的菜單,進入用戶的管理頁面。

截屏2020-03-31下午3.49.02.png

咱們想要對這個頁面進行一些設置,比方說頁面的標題Blog_auth,頁面表格的表頭字段名。這時咱們須要改生成的數據模型文件,點開文件夾下的文件blog_auth.go,咱們將其以下改動:

package main

import (
    "github.com/GoAdminGroup/go-admin/context"
    "github.com/GoAdminGroup/go-admin/modules/db"
    "github.com/GoAdminGroup/go-admin/plugins/admin/modules/table"
    "github.com/GoAdminGroup/go-admin/template/types/form"
)

func GetBlogAuthTable(ctx *context.Context) table.Table {

    blogAuthTable := table.NewDefaultTable(table.DefaultConfigWithDriver("mysql"))

    info := blogAuthTable.GetInfo()

    info.AddField("ID", "id", db.Int).FieldFilterable()
    info.AddField("用戶名", "username", db.Varchar)
    info.AddField("密碼", "password", db.Varchar)

    info.SetTable("blog_auth").SetTitle("博客用戶").SetDescription("博客用戶")

    formList := blogAuthTable.GetForm()

    formList.AddField("ID", "id", db.Int, form.Default).FieldNotAllowAdd()
    formList.AddField("用戶名", "username", db.Varchar, form.Text)
    formList.AddField("密碼", "password", db.Varchar, form.Password)

    formList.SetTable("blog_auth").SetTitle("博客用戶").SetDescription("博客用戶")

    return blogAuthTable
}

而後從新運行程序,再訪問一下博客用戶的管理頁面,能夠看到標題等內容已經被改變:

截屏2020-03-31下午3.53.36.png

是否是很簡單~這樣就完成了數據表最基礎的管理後臺的搭建。更多細節,留待你們在文檔中去發現!

相關文章
相關標籤/搜索