爲了學習go我從0開始用beego寫了一個簡單我的博客(1)展現主頁

    由於以前是在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/你就能夠看見你的網站的主頁了

待後續啊,第二部分開始寫登錄系統

相關文章
相關標籤/搜索