QOR-CMS(3):做一个针对user 的CURD,加查询过滤,显示字段,标记label,和各种组件使用

8 篇文章 2 订阅

本文的原文连接是:
https://blog.csdn.net/freewebsys/article/details/80740388

博主地址是:http://blog.csdn.net/freewebsys

前言


https://getqor.com/cn
QOR经过全新架构,以加速开发与部署内容管理系统(CMS)、电子商务系统和业务应用程序。QOR由这类系统中抽象出的通用功能模块构成,其中包含灵活可配置的后台、内容发布系统、媒体库等等。
文档:
https://doc.getqor.com/
代码:
https://github.com/golangpkg/qor-cms-demos
全部qor文章:
https://blog.csdn.net/freewebsys/article/category/7742598

1,qor-curd


qor的一个核心功能,也是我超级喜欢的一个功能。
就是可以配置配置。就能完成一个 CRUD的界面,超级方便呢。
看看qor设计的一个系统,对应每一个不同的cms,总有写资源是不一样的。
没有使用通用的模式,而是将数据的权限控制交给了开发人员。
开发人员设计几个数据结构,然后就可以操作mysql数据库了。

2,一个超级赞的CURD


先看代码:

package main

import (
    "github.com/jinzhu/gorm"
    _ "github.com/jinzhu/gorm/dialects/sqlite"
    "github.com/qor/admin"
    "net/http"
    "database/sql"
    "fmt"
)

//声明全局变量
var (
    // 注册数据库,可以是sqlite3 也可以是 mysql 换下驱动就可以了。
    DB, _ = gorm.Open("sqlite3", "demo.db")
    // 初始化admin 还有其他的,比如API
    Admin = admin.New(&admin.AdminConfig{DB: DB, SiteName: "Qor Admin "})
)

func init() {
    //地址
    type Address struct {
        gorm.Model
        Code string
        Name string
    }
    //角色
    type Role struct {
        gorm.Model
        Name string
    }
    //用户
    type User struct {
        gorm.Model
        Email     string
        Password  string
        Name      sql.NullString
        Gender    string
        Role      Role
        Addresses []Address
        Active     bool
    }
    DB.AutoMigrate(&Address{}, &Role{}, &User{}) //自动创建表。

    address := Admin.AddResource(&Address{}, &admin.Config{Name: "地址管理", Menu: []string{"组织管理"}})
    role := Admin.AddResource(&Role{}, &admin.Config{Name: "角色管理", Menu: []string{"组织管理"}})
    // Add it to Admin
    user := Admin.AddResource(&User{}, &admin.Config{Name: "用户管理", Menu: []string{"组织管理"}})
    // 显示字段
    //user.IndexAttrs("Name", "Gender", "Role", "Password", "CreateAt")
    // 不显示字段
    user.IndexAttrs("-Password", "-Role", "-Addresses")
    user.Meta(&admin.Meta{Name: "Email", Label: "邮箱"})
    user.Meta(&admin.Meta{Name: "Name", Label: "名称"})
    user.Meta(&admin.Meta{Name: "Gender", Label: "性别", Config: &admin.SelectOneConfig{Collection: []string{"Male", "Female", "Unknown"}}})
    分组显示
    //user.Scope(&admin.Scope{Name: "Male", Group: "Gender", Handler: func(db *gorm.DB, context *qor.Context) *gorm.DB {
    //  return db.Where("gender = ?", "Male")
    //}})
    //user.Scope(&admin.Scope{Name: "Female", Group: "Gender", Handler: func(db *gorm.DB, context *qor.Context) *gorm.DB {
    //  return db.Where("gender = ?", "Female")
    //}})

    user.Action(&admin.Action{
        Name: "enable",
        Handler: func(actionArgument *admin.ActionArgument) error {
            // `FindSelectedRecords` => in bulk action mode, will return all checked records, in other mode, will return current record
            for _, record := range actionArgument.FindSelectedRecords() {
                actionArgument.Context.DB.Model(record.(*User)).Update("Active", true)
            }
            return nil
        },
    })
    // Filter users by gender
    user.Filter(&admin.Filter{
        Name: "性别",
        Config: &admin.SelectOneConfig{
            Collection: []string{"Male", "Female", "Unknown"},
        },
    })
    // Filter products by collection
    user.Filter(&admin.Filter{
        Name:   "角色",
        Config: &admin.SelectOneConfig{RemoteDataResource: role},
    })

    fmt.Println(user)
    fmt.Println(role)
    fmt.Println(address)
}

func main() {
    // 启动服务
    mux := http.NewServeMux()
    Admin.MountTo("/admin", mux)
    http.ListenAndServe(":9000", mux)
}

系统是英文的,可以给user的每一个字段加上一个 label 表示中文名称。
同时还可以增加一个type类型表示是个输入框,chekckbox,等类型。

 user.Meta(&admin.Meta{Name: "Email", Label: "邮箱"})
    user.Meta(&admin.Meta{Name: "Name", Label: "名称"})
    user.Meta(&admin.Meta{Name: "Gender", Label: "性别", Config: &admin.SelectOneConfig{Collection: []string{"Male", "Female", "Unknown"}}})  

增加拦截:

// Filter products by collection
    user.Filter(&admin.Filter{
        Name:   "角色",
        Config: &admin.SelectOneConfig{RemoteDataResource: role},
    })

按照角色查询过滤,并且这个数据字段是从ajax 查询 role 数据表查询到的。

3,显示界面




还是那个 main 函数,由于不直接操作页面。
所以显示,都是通过参数配置进行的,执行都是再 qor的文档里面慢慢研究的。

4,总结


qor 通过一系列的配置,来控制 curd的。
加上分页查询,过滤,并且对于slelect 还可以关联查询其他数据表的数据。
比如说用户的角色配置,查询的是角色表。
用户的组查询 组数据表,地址查询地址信息表。
再新增和修改都是这样操作的。这些功能写起来到不是很复杂,但是进行多个数据库查询,咋也得花上几个小时完成,但是使用qor 只需要配置下就行了。也就画上几分钟,当然,我研究的时候花了好几天。
再做新功能的时候超级快了。更多时间花到业务逻辑上,而不是做CRUD管理查询啥的。。

本文的原文连接是:
https://blog.csdn.net/freewebsys/article/details/80740388

博主地址是:http://blog.csdn.net/freewebsys

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值