和lock一起学beego 博客系统开发为例(二)

接着上篇来写《和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的配置文件使用

转载于:https://my.oschina.net/lockupme/blog/691402

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值