为了学习go我从0开始用beego写了一个简单个人博客(1)展示主页

    因为之前是在python Django\Tornado框架平台从事开发,对于刚接触go语言来说我选择了beego作为我的第一个入门语言原因之一是在于它太像前面两个了,而且居然是国人写的,加上丰富而有全的中文文档GitHub star数1.5W+入坑诱惑力满满。

废话不多说直接开始

先来看看博客长什么样,我追求的基本功能就是添加博客,编辑博客,删除博客,以及登陆和后台管理等基本功能

主页

后台管理

一 、 准备工作

首先安装beego

go get github.com/astaxie/beego
go get github.com/beego/bee

安装bee工具是为了能够自动生成项目结构,类似于django-admin startproject

注意为了能够在命令端运行bee工具需要先将你的go工作目录下的/bin目录加到系统环境变量中就是$GOPATH/bin

运行一下命令生成你的第一个项目文件结构

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

 

二、开始

首先我们开始创建简单的数据库表模型,因为追究简单快速开发所以表结构不会太复杂

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/你就可以看见你的网站的主页了

待后续啊,第二部分开始写登陆系统

转载于:https://my.oschina.net/u/3640109/blog/3028122

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值