scaffold: 根据数据表,一键生成管理平台(https://github.com/liujianping/scaffold)

James · · 2080 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。
scaffold === scaffold, generate revel project by database schema 脚手架工具, 通过定义数据表,一键生成Revel管理平台项目。 ### 特点 **通过数据表定义, 一键生成管理平台** **支持自定义控件模板** [索引页] ![home](http://7xjh31.com1.z0.glb.clouddn.com/home.png) [控件] ![list](http://7xjh31.com1.z0.glb.clouddn.com/widget.png) [查询控件] ![add](http://7xjh31.com1.z0.glb.clouddn.com/find.png) [新增页] ![update](http://7xjh31.com1.z0.glb.clouddn.com/add.png) [列表页] ![index](http://7xjh31.com1.z0.glb.clouddn.com/index.png) 以上图片效果均为实际生成效果, 未编写一行代码:) ### 安装 本工具会执行 goimports 工具格式化生成的文件, 请提前安装好该工具. ```` $: go get github.com/liujianping/scaffold ```` ### 快速开始 #### 创建 Revel 项目 ```` $: revel new [project/path] ```` 编辑 项目配置 conf/app.conf 文件, 增加相应数据库配置。 ```` db.driver = mysql db.host = 127.0.0.1 db.port = 3306 db.username = [username] db.password = [password] db.database = [database] ```` #### 定义数据结构 Demo项目中定义数据结构说明如下: ```` DROP TABLE IF EXISTS `user_accounts`; CREATE TABLE `user_accounts` ( `id` INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT 'caption:"编号"', `name` VARCHAR(32) NOT NULL DEFAULT '' COMMENT 'index:"y" caption:"名称" update:"w" finder:"like" query:"like" widget:"text" valid:"required(),min(6),max(16)"', `mailbox` VARCHAR(128) NOT NULL DEFAULT '' COMMENT 'index:"y" caption:"邮箱" update:"r" finder:"like" query:"like" widget:"email" valid:"required(),email()"', `sex` TINYINT(1) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'index:"y" caption:"性别" update:"w" widget:"selection" relation:"user_accounts_sex"', `description` VARCHAR(256) NOT NULL DEFAULT '' COMMENT 'caption:"描述" update:"w" widget:"textarea"', `password` VARCHAR(32) NOT NULL DEFAULT '' COMMENT 'caption:"密码" update:"r" widget:"password" valid:"required()"', `head_url` VARCHAR(255) NOT NULL DEFAULT '' COMMENT 'caption:"头像" update:"w" widget:"file"', `status` TINYINT(1) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'index:"y" caption:"状态" update:"w" finder:"eq" query:"eq" widget:"selection" relation:"user_accounts_status"', `create_at` TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) COMMENT 'caption:"创建时间" update:"r" widget:"datetime"', `update_at` TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6) COMMENT 'index:"y" caption:"更新时间" update:"w" widget:"datetime"' ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT 'index:"y" caption:"会员账号"'; DROP TABLE IF EXISTS `user_posts`; CREATE TABLE `user_posts` ( `id` INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT 'caption:"编号"', `user_account_id` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT 'index:"y" caption:"作者" update:"w" query:"eq" widget:"finder" relation:"user_accounts"', `title` VARCHAR(32) NOT NULL DEFAULT '' COMMENT 'index:"y" caption:"标题" update:"w" finder:"like" query:"like" widget:"text" valid:"required(),min(12)"', `content` TEXT NOT NULL COMMENT 'index:"n" caption:"内容" update:"w" widget:"textarea"', `image_url` VARCHAR(255) NOT NULL DEFAULT '' COMMENT 'index:"n" caption:"图片" update:"w" widget:"file"', `status` TINYINT(1) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'index:"y" caption:"状态" update:"w" finder:"eq" query:"eq" widget:"selection" relation:"user_posts_status"', `create_at` TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) COMMENT 'caption:"创建时间" widget:"datetime"', `update_at` TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6) COMMENT 'index:"y" caption:"更新时间" update:"w" widget:"datetime"' ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT 'index:"y" caption:"会员帖子"'; -- system options DROP TABLE IF EXISTS `options`; CREATE TABLE `options` ( `id` INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT 'caption:"编号"', `name` VARCHAR(32) DEFAULT "" COMMENT 'index:"y" caption:"名称" update:"w" query:"like" widget:"text" valid:"required()"', `code` VARCHAR(32) DEFAULT "" COMMENT 'index:"y" caption:"代码" update:"w" query:"eq" widget:"text" valid:"required()"', `option_name` VARCHAR(256) DEFAULT "" COMMENT 'index:"y" caption:"选项名称" update:"w" widget:"text" valid:"required()"', `option_code` VARCHAR(32) DEFAULT "" COMMENT 'index:"y" caption:"选项代码" update:"w" widget:"text" valid:"required()"', `option_value` INT NOT NULL DEFAULT 0 COMMENT 'index:"y" caption:"选项值" update:"w" query:"eq" widget:"number" valid:"required()"', `description` VARCHAR(256) DEFAULT "" COMMENT 'caption:"描述" update:"w" widget:"text"' ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT 'index:"y" caption:"系统状态"'; INSERT INTO `options`( `name`, `code`, `option_name`, `option_code`, `option_value`, `description` ) VALUES ( "性别" , "user_accounts_sex", "男", "male", 1, "男"), ( "性别" , "user_accounts_sex", "女", "female", 2, "女"); INSERT INTO `options`( `name`, `code`, `option_name`, `option_code`, `option_value`, `description` ) VALUES ( "账号状态" , "user_accounts_status", "待激活", "unactived", 1, "账号待激活"), ( "账号状态" , "user_accounts_status", "正常", "normal", 2, "账号正常"), ( "账号状态" , "user_accounts_status", "禁用", "forbidden", 3, "账号禁用"); INSERT INTO `options`( `name`, `code`, `option_name`, `option_code`, `option_value`, `description` ) VALUES ( "帖子状态" , "user_posts_status", "待发布", "draft", 1, "帖子待发布"), ( "帖子状态" , "user_posts_status", "已发布", "public", 2, "帖子已发布"), ( "帖子状态" , "user_posts_status", "已作废", "trash", 3, "帖子已作废"); ```` 通过在数据表定义中的注释说明中, 增加脚手架生成规则。具体规则如下: ** 表规则 ** ```` - index index:"y" 表示该表需要在列表页(/)中建立索引, 否则不建立索引 - caption caption:"xxxx" 表示该表的可读性名称 ```` ** 列规则 ** ```` - caption caption:"xxxx" 表示该列的可读性名称 - index index:"y" 表示该列需要在列表页(/module.name.index)中展示, 否则不展示 - query query:"like" 表示在列表页(/module.name.index)查询条件面板中增加相应查询字段。 具体查询运算符包括: like,llike,rlike,eq,gt,ge,lt,le - finder finder:"like" 表示在查找控件列表页(/module.name.finder.index)查询条件面板中增加相应查询字段。 具体查询运算符包括: like,llike,rlike,eq,gt,ge,lt,le - valid valid:"required(),min(6),max(16),email(),length(8)" 表示在进行该列的增加、更新操作时, 需要进行的验证规则 - update update:"y" 表示该列在更新页面需要进行更新操作,否则会使用hidden控件进行隐藏操作。 - widget widget:"text" 表示该列在新增或更新页面需要进行生成的HTML控件模板, 具体控件模板可以进行自定义。 目前支持的控件包括: - text 文本输入控件 - number 数字输入控件 - password 密码输入控件 - email 邮箱输入控件 - datetime 时间输入控件 - file 文件上传输入控件 - finder 管理表记录查找控件 - textarea 编辑区域输入控件 - finder 查询关联表控件 - selection 查询关联selection控件 以上所有控件, 待项目生成后, 均可以在 views/widget/xxx.html 进行自定义设置。 - relation relation:"name" 当widget:"finder"时,表示该字段关联的表名 relation:"name" 当widget:"selection"时,表示该字段关联的options表中的code ```` #### 生成代码 ```` //! 初始化 $: scaffold -f revel init [project/path] //! 生成模块代码 [mvc] $: scaffold -f revel module [project/path] "*" //! 建立索引路由 $: scaffold -f revel index [project/path] ```` #### 运行 Revel 项目 ```` $: revel run [project/path] ```` #### 控件模板 可以在 [project/path]/app/view/widget/ 目录中自定义自己的控件模板。 #### TODO * 其它框架支持(beego等) #### Thanks [jaywcjlove](https://github.com/jaywcjlove) 提供的datetime控件js脚本

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:1006366459

2080 次点击  
加入收藏 微博
4 回复  |  直到 2016-01-19 16:04:05
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传