由于以前是在python Django\Tornado框架平台从事开发,对于刚接触go语言来讲我选择了beego做为个人第一个入门语言缘由之一是在于它太像前面两个了,并且竟然是国人写的,加上丰富而有全的中文文档GitHub star数1.5W+入坑诱惑力满满。css
废话很少说直接开始html
先来看看博客长什么样,我追求的基本功能就是添加博客,编辑博客,删除博客,以及登录和后台管理等基本功能前端
主页python
后台管理mysql
一 、 准备工做git
首先安装beegogithub
go get github.com/astaxie/beego go get github.com/beego/bee
安装bee工具是为了可以自动生成项目结构,相似于django-admin startprojectsql
注意为了可以在命令端运行bee工具须要先将你的go工做目录下的/bin目录加到系统环境变量中就是$GOPATH/bin数据库
运行一下命令生成你的第一个项目文件结构django
bee new [project name]
生成目录结构以下
├── conf │ └── app.conf ├── controllers │ └── default.go ├── main.go ├── models │ └── models.go ├── routers │ └── router.go ├── static │ ├── css │ ├── img │ └── js ├── tests │ └── default_test.go └── views
让咱们来看下各个文件夹的做用
conf下的app.conf是项目的配置文件目录用于配置beego或者放置我的配置文件
controllers用于放置后端逻辑如get post delete update等方法相似于Django的views文件夹
main.go beego项目主要的入口文件
models放置数据库模型后面我会展现个人博客是如何定义数据库模型的
routers顾名思义就是配置路由的
static静态文件目录
tests测试文件目录
views前端文件html和模版文件tpl存放的目录
我但愿你看这篇博客以前有预先读过beego的官方文档(全中文)文档写的比较详细,并且内容也比较少。
开始项目以前咱们还须要几个步骤
首先个人项目是使用msyql做为存储,咱们须要先拉取mysql的驱动文件,以及安装mysql服务端并配置好用户名和密码
go get github.com/go-sql-driver/mysql
而后项目中咱们须要可以在服务器中存储session须要下载beego做者写的session模块
go get github.com/astaxie/beego/session/mysql
2、开始
首先咱们开始建立简单的数据库表模型,由于追究简单快速开发因此表结构不会太复杂
package models import ( "fmt" "time" "github.com/astaxie/beego" "github.com/astaxie/beego/orm" "github.com/go-sql-driver/mysql" ) //User 用户表 type User struct { Id int Name string //登录用户名 PassWord string //登录密码 About string `orm:"default(' ')"` //用于博客主页的关于信息 } //Article 文章表 type Article struct { Id int ArticleName string //文章名 ArticleContent *ArticleContent `orm:"rel(one)"` //文章内容表外健 ArticleType *ArticleType `orm:"rel(fk)"` // 文章类型表外健 CreateTime time.Time `orm:"auto_now_add;type(datetime)"` //建立时间该时间只会在文章建立的时候记录一次 } //ArticleContent 文章内容表 type ArticleContent struct { Id int Article *Article `orm:"reverse(one);"` //文章内容表反向关联外健 Content string `orm:"type(text);default(' ')"` // 文章内容,类型为text长文本类型 } //ArticleType 文章类型表 type ArticleType struct { Id int TypeName string //文章类型 Article []*Article `orm:"reverse(many)"` // 文章类型反向外健 }
用户表只是用于登录和后台管理,全部我没有和其余表关联。
接下来注册这些模型以便用命令来自动在数据库中建立表
仍是在models.go文件下面咱们建立一个init函数来注册这些模型
func init() { orm.RegisterModel(new(User), new(Article), new(ArticleContent), new(ArticleType)) sqlname, _ := beego.GetConfig("String", "sqlname", "mysql") dbname, _ := beego.GetConfig("String", "dbname", "myblogbygo") sqluser, _ := beego.GetConfig("String", "sqluser", "root") sqlpass, _ := beego.GetConfig("String", "sqlpass", "123") sqlhost, _ := beego.GetConfig("String", "sqlhost", "127.0.0.1") sqlport, _ := beego.GetConfig("String", "sqlport", "3306") dbConfig := mysql.NewConfig() dbConfig.User = sqluser.(string) dbConfig.Passwd = sqlpass.(string) dbConfig.Addr = sqlhost.(string) + ":" + sqlport.(string) dbConfig.DBName = dbname.(string) // l, _ := time.LoadLocation("Asia/Shanghai") // dbConfig.Loc = l dbConfig.Net = "tcp" orm.RegisterDriver(sqlname.(string), orm.DRMySQL) //注册一个叫default的数据库, dbConfig.FormatDSN是用于生成链接数据库的字符串好比root:123@tcp(mysql:3306)/[数据库表名] err := orm.RegisterDataBase("default", sqlname.(string), dbConfig.FormatDSN()) if err != nil { fmt.Println(err) } }
链接数据库须要的数据库帐户密码url之类的我放在了配置文件conf/app.conf下面因此我用beego.GetConfig来获取值
这些是我数据库配置文件中的配置
appname = MyblogByGo runmode = dev graceful = true [dev] sessionon = true #启用session sessionhashkey = "asdsdfsdfsdfsfdsf" #sessionhash自定义hash值 sessionprovider = "mysql" #session存储方式为mysql sessionname = "servesession" #网页中的session key enablexsrf = true #启用跨站请求伪造防御 xsrfkey = 61oETzKXQAGaYdkL5gEmGeJJFuYh7EQnp2XdTP1o xsrfexpire = 3600 #xsrfexpire过时时间【秒】 copyrequestbody = true #是否容许获取requestbody里面的内容,好比接口开发的时候常常要从body里面获取json值 httpport = 8000 #网站运行端口 # self config 下面的配置是自定义的,上面的是beego的配置 dbname = "myblogbygo" #数据库表名 sqlname = "mysql" #链接的数据库为mysql数据库 sqluser = "root" #数据库登陆名 sqlpass = "123" #数据库密码 sqlport = "3306" #数据库端口 sqlhost = "localhost" #数据库链接地址 pagecount = 10 #这个是用来定义分页的后面会提到
接下来咱们须要搞一个主页,做为一个后端个人前端真的是仅仅处于初级水平,我也不想从0开始去写一个页面
因此我用的是bootstrap4的官方博客模版,在https://v4.bootcss.com/docs/4.0/examples/下面咱们找到blog模版
把它给弄下来,你也能够在bootstrap4的源码包下的docs/4.0/examples找到它
在views文件夹下面建立一个文件夹叫blog(你能够在static下面建立image/css/js来放网页依赖的相关脚本),将其中杂七杂八的不要的都给去掉后放到下面,导入依赖的css以及js取名叫index.html
接下来展现主页
在controllers文件夹下面建立一个叫index.go的文件用来写主页相关代码
/controllers/index.go
package controllers // IndexController 主页面的入口 type IndexController struct { beego.Controller } // Get 博客主页 func (c *IndexController) Get() { c.TplName = "blog/index.html" }
这个时候在路由里面注册这个函数
在/routers/router.go下面
package routers import ( "github.com/astaxie/beego" "MyblogByGo/controllers" ) func init() { beego.Router("/", &controllers.IndexController{}) }
这个时候启动项目bee run在127.0.0.1:8000/你就能够看见你的网站的主页了
待后续啊,第二部分开始写登录系统