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

接着上篇来写《和lock一块儿学beego 博客系统开发为例(一)mysql

这篇主要完成如下事项:git

1.beego框架,项目的创建github

 2.  表数据的设计sql

 3.  模型的创建数据库

(这篇在公司里写的,用的是win机器)api

 1、beego项目的创建浏览器

beego自带的工具bee是一个很是好的工具,能够建立项目及API接口等。因此在创建项目以前,务必先下载bee工具,bash

在命令符下:框架

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项目的,生成的目录略有不一样

 

2、表数据的设计

既然是简单的博客,那么表也是很经常使用的,以下

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评论';

到此,表的设计已经所有完成。能够根据本身想法,多创建几个表,如标签表,文章分类表,相册分类表

3、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的配置文件使用

相关文章
相关标签/搜索