>백엔드 개발 >Golang >기술 블로그 웹사이트 구축 튜토리얼 - Beego를 사용하여 개발됨

기술 블로그 웹사이트 구축 튜토리얼 - Beego를 사용하여 개발됨

WBOY
WBOY원래의
2023-06-22 13:16:421248검색

1. 서문
요즘 기술 블로그는 프로그래머들이 소통하고, 상호 작용하고, 기술을 전시하고, 아이디어를 확장하는 중요한 플랫폼 중 하나가 되었습니다. 특정 프로그래밍 기반을 갖춘 프로그래머의 경우 개인화된 사용자 정의 및 무료 확장을 달성하기 위해 자신의 블로그를 개발하는 것이 점차 추세가 되었습니다.

이 기사에서는 편리하고 효율적이며 확장하기 쉬운 솔루션을 제공하는 것을 목표로 독자들이 Beego 프레임워크를 사용하여 자신만의 기술 블로그를 구축하도록 안내합니다.

2. Beego 프레임워크 소개
Beego는 Go 언어를 기반으로 개발된 웹 프레임워크로 Python의 Django 프레임워크와 Python의 Tornado 프레임워크에서 영감을 받았습니다. Beego는 RESTful API 개발도 지원하는 가볍고 배우기 쉬우며 효율적이고 유연한 웹 프레임워크입니다.

3. 환경 설정
1. Go 환경 설치
먼저 Go 환경을 설치해야 합니다. 자세한 내용은 공식 설명서를 참조하세요.
2. Beego 및 Bee 도구 설치
Beego와 Bee는 서로 다른 두 가지 도구입니다. 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. 모델 디자인
먼저, 아래와 같이 데이터베이스 테이블을 생성하기 위해 blog.go 파일을 작성해야 합니다.

//데이터 구조

//Article

type Article struct {

"github.com/astaxie/beego/orm"
"time"

}

//Category

type Category 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)"`

}

2. Controller writing

article.go 파일을 Controllers 디렉토리에 작성합니다. 다음과 같이 기사 관련 컨트롤러 메소드를 구현하려면:


package Controllers

import (

Id       int64
Title    string
Articles []*Article `orm:"reverse(many)"`

)

type ArticleController struct {

"myblog/models"
"fmt"
"strconv"
"time"

}

func (this *ArticleController) List() {

BaseController

}

func(이 *ArticleController) Add() {

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) Update() {

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) 삭제() {

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) Detail() {

id, _ := this.GetInt64(":id")
models.DeleteArticleById(id)

this.Redirect("/article/list", 302)

}

3. 파일 보기

다음과 같이 기사 관련 보기 파일을 저장하기 위해 views 디렉토리에 기사 디렉토리를 작성합니다.

//article/list .html

{{template "header.html" .}}

dc6dce4a544fdca2df29d5ac0ea9906b

id, _ := this.GetInt64(":id")

article := models.GetArticleById(id)
this.Data["Article"] = article

this.TplName = "article/detail.html"

16b28748ea4df4d9c2150843fecfba68
{{template "footer.html" .}}

//article/add.html
{ {template "header.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>

16b28748ea4df4d9c2150843fecfba68
{{template "footer.html" .}}

//article/update.html
{{template "header .html" .}}
dc6dce4a544fdca2df29d5ac0ea9906b

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

16b28748ea4df4d9c2150843fecfba68
{{template "footer.html" .}}

//article/detail.html
{{template "header.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>

16b28748ea4df4d9c2150843fecfba68
{{template "footer.html" .}}

5. 프로젝트 실행
터미널에서 bee run 명령을 사용하여 프로젝트를 시작한 다음 블로그에 액세스하려면 http://localhost :8080/article/list를 방문하세요.

6. 요약

이 글에서는 Beego 프레임워크의 사용법을 간략하게 소개하고 이를 기반으로 간단한 블로그 애플리케이션을 구현합니다. 이 기사를 연구함으로써 독자는 Beego 프레임워크의 기본 사용법을 미리 이해할 수 있습니다. 자세한 내용은 공식 문서를 참조하세요.

위 내용은 기술 블로그 웹사이트 구축 튜토리얼 - Beego를 사용하여 개발됨의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.