接着上篇来写《和lock一起学beego 博客系统开发为例(一)》
这篇主要完成以下事项:
1.beego框架,项目的建立
2. 表数据的设计
3. 模型的建立
(这篇在公司里写的,用的是win机器)
一、beego项目的建立
beego自带的工具bee是一个非常好的工具,可以创建项目及API接口等。所以在建立项目之前,务必先下载bee工具,
在命令符下:
go get github.com/beego/bee
安装好后,可以在系统环境变量加添加bee的路径,方便后续直接bee 命令执行
以win为例:这个目录会有bee.exe
C:\GOPATH\bin
现在可以直接在cmd下,bee命令测试了。
我们可以切换到C:\GOPATH\src目录下,用bee new blog命令来创建项目
bee new blog
会自动生成如下文件:
这样beego项目创建完成了。
在这里介绍一下bee的命令常用参数:
new :创建新项目
run :运行项目,默认是以8080端口运行,可以在浏览器运行localhost:8080,出会提示页面
api :是用来创建api项目的,生成的目录略有不同
二、表数据的设计
既然是简单的博客,那么表也是很常用的,如下
article:博客文章表
comment:博客评论表
user:用户表
user_profile:用户详细表
album:相册表
这几张表,足够玩转一个blog了~因为是简单blog吗~
在这里说明一下,如果在项目里创建model话,可以自动生成表,这里先不作说明,直接给SQL语句,在库中直接运行,库名称:blog
CREATE TABLE `album` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`title` varchar(255) NOT NULL DEFAULT '' COMMENT '文章标题',
`picture` varchar(255) DEFAULT '' COMMENT 'Picture',
`keywords` varchar(2550) DEFAULT '' COMMENT '关键词',
`summary` varchar(255) DEFAULT '',
`created` int(10) DEFAULT '0' COMMENT '发布时间',
`viewnum` int(10) DEFAULT '0' COMMENT '阅读次数',
`status` tinyint(1) DEFAULT '1' COMMENT '状态: 0草稿,1已发布',
PRIMARY KEY (`id`),
KEY `INDEX_TCVS` (`title`,`created`,`viewnum`,`status`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='相册';
CREATE TABLE `article` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`title` varchar(255) NOT NULL DEFAULT '' COMMENT '文章标题',
`uri` varchar(255) DEFAULT '' COMMENT 'URL',
`keywords` varchar(2550) DEFAULT '' COMMENT '关键词',
`summary` varchar(255) DEFAULT '',
`content` longtext NOT NULL COMMENT '正文',
`author` varchar(20) DEFAULT '' COMMENT '作者',
`created` int(10) DEFAULT '0' COMMENT '发布时间',
`viewnum` int(10) DEFAULT '0' COMMENT '阅读次数',
`status` tinyint(1) DEFAULT '1' COMMENT '状态: 0草稿,1已发布',
PRIMARY KEY (`id`),
KEY `INDEX_TCVS` (`title`,`created`,`viewnum`,`status`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='文章';
CREATE TABLE `user` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`phone` varchar(20) NOT NULL DEFAULT '' COMMENT '用户名',
`password` varchar(255) NOT NULL DEFAULT '' COMMENT '密码',
`created` int(10) DEFAULT NULL COMMENT '注册时间',
`changed` int(10) DEFAULT NULL COMMENT '编辑时间',
`status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态: 0屏蔽,1正常',
`user_profile_id` int(10) DEFAULT NULL,
PRIMARY KEY (`id`),
CONSTRAINT `user_profile_id` FOREIGN KEY (`id`) REFERENCES `user_profile` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户';
CREATE TABLE `user_profile` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`realname` varchar(15) DEFAULT NULL,
`sex` tinyint(1) DEFAULT '1' COMMENT '1boy,0girl',
`birth` varchar(20) NOT NULL DEFAULT '' COMMENT '生日',
`email` varchar(20) DEFAULT NULL,
`phone` varchar(11) DEFAULT NULL,
`address` varchar(255) NOT NULL DEFAULT '' COMMENT '地址',
`hobby` varchar(255) NOT NULL DEFAULT '' COMMENT '爱好',
`intro` text COMMENT '介绍',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户详情';
CREATE TABLE `comment` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`article_id` int(10) DEFAULT NULL,
`nickname` varchar(15) DEFAULT NULL,
`uri` varchar(255) DEFAULT NULL,
`content` text,
`created` int(10) DEFAULT '0',
`status` tinyint(1) DEFAULT '1' COMMENT '0屏蔽,1正常',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='blog评论';
到此,表的设计已经全部完成。可以根据自己想法,多建立几个表,如标签表,文章分类表,相册分类表
三、Beego中表模型建立
在go语言中,有一个非常强大的struct,可以自定义和引用;在beego中,我们的表模型其实就是用struct属性。
先以article表为例:
struct里定义的,就是article表中的字段,如下:
type Article struct {
Id int
Title string
Uri string
Keywords string
Summary string
Content string
Author string
Created int64
Viewnum int
Status int
}
接下来,我详细介绍一下。
在models文件夹下建立一个文件:article.go,文件内容如下:
package models
import (
"time"
"github.com/astaxie/beego/orm"
_ "github.com/go-sql-driver/mysql"
)
type Article struct {
Id int
Title string
Uri string
Keywords string
Summary string
Content string
Author string
Created int64
Viewnum int
Status int
}
func (this *Article) TableName() string {
return "article"
}
func init() {
orm.RegisterModel(new(Article))
}
我们再看一下user模型:在models建立文件,user.go
这里建立了关联的表,一对一关系,在beego中表的命名是以驼峰形式命名的,如UserProfile,在数据库其实是 user_profile形式存在,会自动以大写字母分割加下划线生成表名。
在注册多表模型的时候,orm.RegisterModel(new(User), new(UserProfile)) 来初始化。
package models
import (
"fmt"
"github.com/astaxie/beego/orm"
"github.com/gogather/com"
)
type User struct {
Id int
Phone string
UserProfile *UserProfile `orm:"rel(one)"`
Password string
Status int
Created int64
Changed int64
}
type UserProfile struct {
Id int
Realname string
Sex int
Birth string
Email string
Phone string
Address string
Hobby string
Intro string
User *User `orm:"reverse(one)"`
}
func (this *User) TableName() string {
return "user"
}
func init() {
orm.RegisterModel(new(User), new(UserProfile)) //
}
其它表的模型建立和上面的差不多,自己试着建立一下;如果中间报错,可能是一些包或变量未使用,编译的时候会出错,这没事,自己试着会注释。在保存的时候,bee run会自动检测出错误,大家要学会使用。
最后截图看看:
好的,今天先介绍到这里,下篇主要完成以下工作:
1.模型里如何创建方法
2. 数据库的引用
3. beego的配置文件使用