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"
)
//データ構造
//Articletype 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
dc6dce4a544fdca2df29d5ac0ea9906b
<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>
//article/add.html
54ce98a3ca8e060b4814a5eae8e73eab
{{テンプレート "footer.html" .}}
//article/update.html
dc6dce4a544fdca2df29d5ac0ea9906b
<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>
//article/detail.html
dc6dce4a544fdca2df29d5ac0ea9906b
<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>
5. プロジェクトを実行する
6. 概要
以上が技術ブログ Web サイト構築チュートリアル - Beego を使用して開発の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。