一、前言
如今,技術部落格已成為了程式設計師交流互動、展示技術、拓寬思維的重要平台之一。對於有一定編程基礎的程式設計師來說,自己開發博客,實現個性化定制和自由擴展,已逐漸成為一種趨勢。
本文將引導讀者使用Beego框架來建立自己的技術博客,旨在提供一種方便高效且易於擴展的解決方案。
二、Beego框架簡介
Beego是基於Go語言開發的Web框架,它的設計靈感來自於Python的Django框架和Python的Tornado框架。 Beego是個輕量、簡單易學、有效率且靈活的Web框架,同時也支援RESTful API開發。
三、環境建置
1、安裝Go環境
首先需要安裝Go環境,具體步驟可查閱官方文件進行安裝。
2、安裝Beego和Bee工具
Beego和Bee是兩個不同的工具,Beego是核心框架,而Bee是一個基於Beego框架的命令列工具,可用於新建專案、建立Controller、Model、 View等,大大提高了開發效率。
使用指令安裝:go get github.com/astaxie/beego
go get github.com/beego/bee
3、建立專案及設定
建立一個名為myblog的專案:bee new myblog
然後進入myblog目錄:cd myblog
現在在myblog目錄下會有一個名為conf的資料夾,裡面的app.conf就是設定文件,我們可以在這裡進行相關配置,如資料庫的連接位址、連接埠等。
四、實作部落格功能
1、模型設計
首先,需在models目錄下撰寫blog.go文件,用於建立資料庫的表,如下所示:
#package models
import (
"github.com/astaxie/beego/orm" "time"
)
//資料結構
//文章
type Article struct {
Id int64 `orm:"auto"` Title string `orm:"size(100)"` Content string `orm:"type(text)"` ImgUrl string `orm:"size(200)"` Category *Category `orm:"-"` Created time.Time `orm:"auto_now_add;type(datetime)"` Updated time.Time `orm:"auto_now_add;type(datetime)"`
}
//分類
type Category struct {
Id int64 Title string Articles []*Article `orm:"reverse(many)"`
}
2、Controller編寫
在controllers目錄下編寫article.go文件,用於實現與文章相關的控制器方法,如下所示:
package controllers
import (
"myblog/models" "fmt" "strconv" "time"
)
type ArticleController struct {
BaseController
}
func (this *ArticleController) List() {
categoryIdStr := this.GetString("category_id") categoryId, _ := strconv.ParseInt(categoryIdStr, 10, 64) categories := models.GetAllCategory() this.Data["Categories"] = categories var articles []*models.Article if categoryId == 0 { articles = models.GetAllArticle() } else { articles = models.GetArticleByCategory(categoryId) } this.Data["Articles"] = articles this.Data["CategoryId"] = categoryId this.TplName = "article/list.html"
}
func (this *ArticleController) Add() {
if this.Ctx.Request.Method == "GET" { categories := models.GetAllCategory() this.Data["Categories"] = categories this.TplName = "article/add.html" return } title := this.GetString("title") content := this.GetString("content") categoryId, _ := this.GetInt64("category_id") imgUrl := this.GetString("img_url") article := models.Article{Title: title, Content:content, ImgUrl:imgUrl, Category:&models.Category{Id:categoryId}} models.AddArticle(&article) fmt.Println("添加成功") this.Redirect("/article/list", 302)
}
func (this *ArticleController) Update() {
id, _ := this.GetInt64(":id") if this.Ctx.Request.Method == "GET" { article := models.GetArticleById(id) this.Data["Article"] = article categories := models.GetAllCategory() this.Data["Categories"] = categories this.TplName = "article/update.html" return } title := this.GetString("title") content := this.GetString("content") categoryId, _ := this.GetInt64("category_id") imgUrl := this.GetString("img_url") article := models.Article{Id: id, Title: title, Content:content, ImgUrl:imgUrl, Category:&models.Category{Id:categoryId}} models.UpdateArticle(&article) this.Redirect("/article/list", 302)
}
func (this *ArticleController) Delete() {
id, _ := this.GetInt64(":id") models.DeleteArticleById(id) this.Redirect("/article/list", 302)
#}
func (this *ArticleController) Detail() {
id, _ := this.GetInt64(":id") article := models.GetArticleById(id) this.Data["Article"] = article this.TplName = "article/detail.html"
}
3、View視圖檔案
在views目錄下寫article目錄,存放article相關的視圖文件,如下:
//article/list.html
{{template "header.html" .}}
<h3>文章管理</h3> <div class="list-nav"> <a href="{{.ctx.Request.URL.Path}}">全部</a> {{range .Categories}} <a href="{{.ctx.Request.URL.Path}}?category_id={{.Id}}">{{.Title}}</a> {{end}} </div> <table> <thead> <tr> <th>Id</th> <th>标题</th> <th>分类</th> <th>发布时间</th> <th>更新时间</th> <th>操作</th> </tr> </thead> <tbody> {{range .Articles}} <tr> <td>{{.Id}}</td> <td>{{.Title}}</td> <td>{{.Category.Title}}</td> <td>{{.Created.Format "2006-01-02 15:04:05"}}</td> <td>{{.Updated.Format "2006-01-02 15:04:05"}}</td> <td> <a href="/article/detail?id={{.Id}}">查看</a> <a href="/article/update?id={{.Id}}">修改</a> <a href="/article/delete?id={{.Id}}" onclick="return confirm('确定删除文章【{{.Title}}】吗?')">删除</a> </td> </tr> {{end}} </tbody> </table>
#< /div>
{{template "footer.html" .}}
//article/add.html
{{template "header.html" .}}
#
<h3>添加文章</h3> <form action="/article/add" method="post"> <p>标题: <input type="text" name="title"></p> <p> 分类: <select name="category_id"> {{range .Categories}} <option value="{{.Id}}">{{.Title}}</option> {{end}} </select> </p> <p>图片Url: <input type="text" name="img_url"></p> <p>内容: <textarea name="content"></textarea></p> <p><input type="submit" value="添加"></p> </form>
//article/update.html
{{template "header.html " .}}
<h3>修改文章</h3> <form action="/article/update?id={{.Article.Id}}" method="post"> <p>标题: <input type="text" name="title" value="{{.Article.Title}}"></p> <p> 分类: <select name="category_id"> {{range $index, $option := .Categories}} <option value="{{$option.Id}}" {{if eq $option.Id $.Article.Category.Id}}selected{{end}}>{{$option.Title}}</option> {{end}} </select> </p> <p>图片Url: <input type="text" name="img_url" value="{{.Article.ImgUrl}}"></p> <p>内容: <textarea name="content" rows="30">{{.Article.Content}}</textarea></p> <p><input type="submit" value="修改"></p> </form>
{{template "header.html" .}}
<h3>{{.Article.Title}}</h3> <p>分类:{{.Article.Category.Title}}</p> <p>发布时间:{{.Article.Created.Format "2006-01-02 15:04:05"}}</p> <p>更新时间:{{.Article.Updated.Format "2006-01-02 15:04:05"}}</p> <p>内容:</p> <div class="detail-content">{{.Article.Content}}</div>
{{template "footer.html" .}}
在終端機使用bee run指令啟動項目,然後造訪http://localhost:8080/article/list即可造訪部落格。
本文簡單介紹了Beego框架的使用,並在此基礎上實現了一個簡單的部落格應用程式。透過本文的學習,讀者可初步了解Beego架構的基本使用方法,更多詳細內容請參考官方文件。
以上是技術部落格建站教學—使用Beego開發的詳細內容。更多資訊請關注PHP中文網其他相關文章!