ホームページ > バックエンド開発 > Golang > 技術ブログ Web サイト構築チュートリアル - Beego を使用して開発

技術ブログ Web サイト構築チュートリアル - Beego を使用して開発

WBOY
リリース: 2023-06-22 13:16:42
オリジナル
1238 人が閲覧しました

1. はじめに
今日、テクノロジー ブログは、プログラマーがコミュニケーションし、対話し、テクノロジーを展示し、アイデアを広げるための重要なプラットフォームの 1 つとなっています。一定のプログラミングの基礎を持ったプログラマーにとって、パーソナライズされたカスタマイズと自由な拡張を実現するために独自のブログを開発することが徐々にトレンドになってきています。

この記事では、便利で効率的で拡張しやすいソリューションを提供することを目的として、Beego フレームワークを使用して独自のテクノロジー ブログを構築する方法を読者に説明します。

2. Beego フレームワークの紹介
Beego は Go 言語をベースに開発された Web フレームワークで、その設計は Python の Django フレームワークと Python の Tornado フレームワークからインスピレーションを受けています。 Beego は、軽量で学びやすく、効率的かつ柔軟な Web フレームワークであり、RESTful API 開発もサポートしています。

3. 環境セットアップ
1. Go 環境のインストール
まず Go 環境をインストールする必要があります。具体的な手順については、インストールに関する公式ドキュメントを参照してください。
2. Beego と Bee ツールのインストール
Beego と Bee は 2 つの異なるツールです。Beego はコア フレームワークであり、Bee は Beego フレームワークに基づくコマンド ライン ツールで、新しいプロジェクトの作成や作成に使用できます。コントローラー、モデル、ビューなどにより、開発効率が大幅に向上します。

コマンドを使用してインストールします: go get github.com/astaxie/beego
go get github.com/beego/bee

3. プロジェクトと構成を作成します
プロジェクトを作成します名前付き Myblog プロジェクト: bee new myblog
次に、myblog ディレクトリを入力します: cd myblog
これで、myblog ディレクトリに conf という名前のフォルダが作成されます。その中にある app.conf が設定ファイルです。ここで実行できます。データベース接続アドレス、ポートなどの構成。

4. ブログ機能の実装
1. モデル設計
まず、以下に示すように、データベース テーブルを作成するために、models ディレクトリに blog.go ファイルを記述する必要があります。 # #パッケージモデル

import (

"github.com/astaxie/beego/orm"
"time"
ログイン後にコピー

)

//データ構造

//Article

type Article構造体{

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)"`
ログイン後にコピー

}

//Category

type カテゴリ構造体 {

Id       int64
Title    string
Articles []*Article `orm:"reverse(many)"`
ログイン後にコピー

}

2. コントローラーの書き込み

実装のためにコントローラー ディレクトリにarticle.go ファイルを書き込みます記事に関連するコントローラー メソッドは次のとおりです。


packageコントローラーs

import (

"myblog/models"
"fmt"
"strconv"
"time"
ログイン後にコピー

)

type ArticleController struct {

BaseController
ログイン後にコピー

}

func (この *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 (この *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 (この *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 (この *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. ファイルの表示

ビュー ディレクトリに記事ディレクトリを書き込み、記事関連情報を保存します。以下に示すように、ファイル:


//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>

{{テンプレート "footer.html" .}}


//article/add.html

{{テンプレート "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>
ログイン後にコピー

{{テンプレート "footer.html" .}}


//article/update.html

{{テンプレート "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>
ログイン後にコピー

{{テンプレート "footer.html" .}}


//article/detail.html

{{テンプレート "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>
ログイン後にコピー

{{テンプレート "footer.html" .}}


5. プロジェクトを実行する

ターミナルで bee run コマンドを使用してプロジェクトを開始し、http://localhost:8080/article/list にアクセスしてブログにアクセスします。


6. 概要

この記事では、Beego フレームワークの使用法を簡単に紹介し、これに基づいて簡単なブログ アプリケーションを実装します。この記事を読むことで、Beego フレームワークの基本的な使い方を予備的に理解できます (詳細については公式ドキュメントを参照してください)。

以上が技術ブログ Web サイト構築チュートリアル - Beego を使用して開発の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート