首頁 > 後端開發 > Golang > 技術部落格建站教學—使用Beego開發

技術部落格建站教學—使用Beego開發

WBOY
發布: 2023-06-22 13:16:42
原創
1238 人瀏覽過

一、前言
如今,技術部落格已成為了程式設計師交流互動、展示技術、拓寬思維的重要平台之一。對於有一定編程基礎的程式設計師來說,自己開發博客,實現個性化定制和自由擴展,已逐漸成為一種趨勢。

本文將引導讀者使用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>
登入後複製


{{template "footer.html" .}}

//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 "footer.html" .}}

##//article/detail.html

{{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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板