使用beego框架開(kāi)發(fā)個(gè)人博客(三)

image

上篇文章已經(jīng)可以提交文章到數(shù)據(jù)庫(kù),需要在Post時(shí),改造一下返回結(jié)果,如果提交成功就跳轉(zhuǎn)
到文章列表頁(yè)面,如果提交失敗就顯示提示信息

封裝POST返回結(jié)果

添加一個(gè)輔助的方法,來(lái)封裝response

package utils

import (
    "encoding/json"
    "net/http"
)

type Response struct {
    Status int    `json:"status"`
    Msg    string `json:"msg"`
}

func (resp *Response) WriteJson(w http.ResponseWriter) {
    data, err := json.Marshal(resp)
    if err != nil {
        w.Write([]byte(`{Status:-1}`))
    } else {
        w.Write(data)
    }
}

在提交時(shí),如果失敗返回對(duì)應(yīng)的錯(cuò)誤碼和錯(cuò)誤信息

resp := utils.Response{
  Status: 0,
}
defer resp.WriteJson(this.Ctx.ResponseWriter)

err := blog.PostBlog(blog)
if err != nil {
  resp = utils.Response{
    Status: -1,
    Msg:    "post blog error",
  }
}

前端頁(yè)面邏輯

$.ajax({
                    url:'/editor',
                    method:'POST',
                    data:{title:title,origin:origin,content:content},
                    success:function(data){
                        alert(data)
                        var resp = JSON.parse(data)
                        if(resp.status == 0){
                            window.location.href="/blog";
                        }else{
                            alert(JSON.parse(resp.msg))
                        }
                    }
                })

添加文章列表、詳情頁(yè)面

和之前的邏輯一樣,添加對(duì)應(yīng)的模板頁(yè)面 index.html,添加對(duì)用的controller BlogController
和路由

  • controller blog.go
package controllers

import "github.com/astaxie/beego"

type BlogController struct {
    beego.Controller
}

func (this *BlogController) Get() {
    this.TplName = "index.html"
}
  • 路由
beego.Router("/blog", &controllers.BlogController{})
  • 列表頁(yè)面
效果圖

從數(shù)據(jù)庫(kù)中查詢所有的數(shù)據(jù)

models

func (b *BlogModel) GetAllBlogs(page int) ([]BlogModel, error) {
    var blogs []BlogModel
    err := db.FindAllSort(database, collection, "-date", nil, nil, &blogs)
    return blogs, err
}

controllers

func (this *BlogController) Get() {
    blogs, err := models.NewBlog().GetAllBlogs(0)
    if err == nil {
        this.Data["Blogs"] = blogs
    }

    this.TplName = "index.html"
}
  • 頁(yè)面渲染

index.html

{{range .Blogs}}
<article class="post-card">
        <a class="post-card-image-link" href="/blog/{{.Id}}">
                {{if .Img}}
                <div class="post-card-image" style="background-image: url({{.Img}})">

                </div>
                {{end}}
        </a>
        <div class="post-card-content">
                <a class="post-card-content-link" href="">
                        <header class="post-card-header">
                                <span class="post-card-tags">Golang</span>

                                <h2 class="post-card-title">{{.Title}}</h2>
                        </header>
                        <section class="post-card-excerpt">
                                <p>
                                        {{.Summary}}
                                </p>
                        </section>
                </a>
                <footer class="post-card-meta">
                        <span class="post-card-author">
                                <a >{{.Author}}</a>
                        </span>
                        <span class="post-card-date">{{dateformat .Date "2006年01月02日"}}</span>
                </footer>
        </div>
</article>
{{end}}
  • 詳情頁(yè)面
效果圖

models

func (b *BlogModel) GetBlogById(id string) (BlogModel, error) {
    var blog BlogModel
    err := db.FindOne(database, collection, bson.M{"_id": id}, nil, &blog)
    return blog, err
}

controllers

func (this *BlogController) Detail() {
    id := this.Ctx.Input.Param(":id")
    data, err := models.NewBlog().GetBlogById(id)
    if err == nil {
        this.Data["Content"] = data
    } else {
        this.Abort("404")
    }

    this.TplName = "detail.html"
}

routers

    beego.Router("/blog/:id", &controllers.BlogController{}, "get:Detail")

詳情頁(yè)面

<article class="post ">
                        <div class="post-head">
                            <h1 class="post-title">
                                {{.Content.Title}}
                            </h1>
                            <div class="post-meta">
                                <span class="author">
                                    作者:
                                    <a >{{.Content.Author}}</a>
                                </span>
                                <time class="post-date">{{dateformat .Content.Date "2006年01月02日"}}</time>
                            </div>
                        </div>

                        <div class="post-content markdown-body">
                            <p>{{str2html .Content.Content}}</p>
                        </div>

                        <footer class="post-footer clearfix">
                            <div class="pull-left tag-list">
                                <i class="fa fa-folder-open-o">
                                    {{range .Content.Tags}}
                                    <a href="/blog/tag/{{.Id}}">{{.Name}}</a>
                                    {{end}}

                                </i>
                            </div>
                        </footer>
                    </article>

完整的源碼

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1、通過(guò)CocoaPods安裝項(xiàng)目名稱項(xiàng)目信息 AFNetworking網(wǎng)絡(luò)請(qǐng)求組件 FMDB本地?cái)?shù)據(jù)庫(kù)組件 SD...
    陽(yáng)明AI閱讀 16,172評(píng)論 3 119
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,506評(píng)論 19 139
  • 這些話,只想說(shuō)給另一個(gè)世界的你聽(tīng)。因?yàn)檫@個(gè)世界上我只是個(gè)小透明,沒(méi)人會(huì)為我駐足。 很多時(shí)候,腦海里總有一個(gè)聲音,脫...
    iiiiim閱讀 314評(píng)論 0 0
  • 世上沒(méi)有兩個(gè)相同的掌紋,正如同一棵樹(shù)上的葉子,綠得相似,卻各有各的風(fēng)采。我們每個(gè)人生來(lái)都是君王,本...
    笑眼盈盈閱讀 383評(píng)論 0 1
  • 親愛(ài)的樹(shù) 我曾在美好的夢(mèng)境里 刻上自己初戀的名字 可愛(ài)的樹(shù) 挺拔高大綠意濃濃 如同愛(ài)情和那美好的時(shí)光
    Ailx閱讀 59評(píng)論 0 0

友情鏈接更多精彩內(nèi)容