beego開發(fā)輕博客——第八講 文章的評論

【小雞創(chuàng)作】beego開發(fā)輕博客

本章目標(biāo):添加“文章的評論”功能
github: 打開后杭攻,點擊右上角star按鈕
視頻教程: B站地址
簡書專集:點我


評論頁面的顯示

1. 功能分析

評論功能是一個單獨的頁面损俭,里面需要顯示文章摘要骑篙,因此音诫,我們需要添加路由以及控制器方法,讓頁面能夠跳轉(zhuǎn)到評論頁面吱韭。我們設(shè)定評論的路由路徑為“/comment/:key”棱烂,在控制器中,我們需要到數(shù)據(jù)庫中根據(jù)key查到出文章喇伯,指定頁面模版為“comment.html”喊儡。接著,我還需要修改 views->comment.html 頁面稻据,將文章摘要顯示出來艾猜。

2. 控制器邏輯調(diào)整

2.1 修改controllers->index.go添加GetComment,查詢文章信息返回給頁面攀甚,代碼如下(請留意代碼中的注解箩朴,都是邏輯說明):

//@router /comment/:key
func (this *IndexController) GetComment(){
    //得到頁面的key
    key:= this.Ctx.Input.Param(":key")
    //根據(jù)可以 從數(shù)據(jù)庫中查詢出文章
    note,err:=models.QueryNoteByKey(key)
    // 如果 查詢時候報錯,就提示文章不存在秋度,并將錯誤原因打印到日志炸庞。
    if err!=nil{
        this.Abort500(syserror.New("文章不存在",err))
    }
    this.Data["note"] = note
    this.TplName="comment.html"
}

3. 修改前臺頁面

3.1 修改views->comment.html 頁面,修改代碼如下:
<div class="container container-message container-details container-comment">
        <div class="contar-wrap">
            <div class="item">
                <!-- comm/note_summary_tpl.html 顯示文件摘要的頁面模版(上講“文章顯示” ,我們已經(jīng)定義說明過)-->
                {{template "comm/note_summary_tpl.html" .note }}
            </div>  
            ...
        </div>
</div>
3.2 修改views->details.html 頁面,修改頁面調(diào)整路徑,修改代碼如下:
<div class="container container-message container-details">
        <div class="contar-wrap">
            ...
            <div class="comt layui-clear">
                <a href="javascript:;" class="pull-left">評論</a>
                <!--  修改此處頁面跳轉(zhuǎn)路徑荚斯,讓頁面能夠跳轉(zhuǎn)到評論頁面  -->
                <a href="/comment/{{.note.Key}}" class="pull-right">寫評論</a>
            </div>
            ...
        </div>
</div>

顯示評論頁面埠居,我們已經(jīng)完成


定義數(shù)據(jù)庫-評論表

1、新增models->message.go 文件事期,定義評論表滥壕。代碼如下

type Message struct {
    Model
    Key     string `grom:"unique_index; not null"json:"key"` //評論的key唯一標(biāo)示
    Content string `json:"content"` //評論的內(nèi)容
    UserId  int    `json:"user_id"`//評論人id
    User    User   `json:"user"`//評論人
    NoteKey string `json:"note_key"`//所屬文章的key,可以為空兽泣,為空代表系統(tǒng)留言
    Praise  int    `gorm:"default:0" json:"praise"`//點贊數(shù)量
}

2. 修改models->core.go 文件绎橘,將Message同步到數(shù)據(jù)庫中,修改代碼如下:

func init() {
    ...
    //添加了參數(shù) &Message{}
    db.AutoMigrate(&User{},&Note{},&Message{})
    ...
}

評論功能的數(shù)據(jù)庫表已經(jīng)定義好


文章評論功能

1. 功能分析

文章評論功能的用戶操作流程為:在評論頁面填寫好評論的內(nèi)容后點擊確定,將評論的內(nèi)容保存到數(shù)據(jù)庫称鳞,我們假定文章評論新增的路由路徑為/message/new/:key涮较。
因此評論功能,我們需要分為下面幾步:
1.修改前臺頁面冈止,在用戶點擊確定按鈕后狂票,發(fā)送請求到后臺,
2.添加保存的評論到數(shù)據(jù)庫的方法熙暴。
3.添加路徑和控制器來處理用戶評論的內(nèi)容闺属,將其保存到數(shù)據(jù)庫中。

2. 修改前臺頁面

2.1 修改views->comment.html頁面,修改form表單里面的元素周霉,修改代碼如下(注意 button 屬性 lay-submit 和 lay-filter="comment" 掂器,是layui提供,與監(jiān)聽form提交有關(guān))
    <div class="container container-message container-details container-comment">
            <div class="contar-wrap">
                ... 
                <form class="layui-form" action="">
                    <!-- 傳入文章的key-->
                    <input type="hidden" name ="key" value="{{.note.Key}}">
                    <!-- 傳入評論的內(nèi)容:content-->
                    <div class="layui-form-item layui-form-text">
                        <textarea  class="layui-textarea" name="content" style="resize:none" placeholder="寫點什么啊"></textarea>
                    </div>
                    <div class="btnbox">
                            <!-- lay-submit lay-filter="comment" 是有l(wèi)ayui提供的俱箱,用于綁定提交事件 -->
                            <button lay-submit class="layui-btn" lay-filter="comment" >
                            確定
                        </button>
                    </div>
                </form>
            </div>
    </div>
</div>
2.2 還是修改views->comment.html頁面,添加腳本唉匾,監(jiān)聽form提交,代碼如下:
...
{{ template "comm/footer.html" .}}
<script type="text/javascript">
    layui.use(['form',"jquery","layer"],function () {
        var form = layui.form,$= layui.jquery,layer = layui.layer;
        // 監(jiān)聽評論的form表單提交事件匠楚。
        form.on("submit(comment)",function (formdata) {
            //我們假定評論新增路由的路徑為 "/message/new/:key" key是文章的key
            $.post("/message/new/"+formdata.field.key,{content:formdata.field.content},function (data) {
                if(data.code ==0){
                    layer.msg("評論成功!");
                    //評論成功就 跳轉(zhuǎn)到文章詳情頁面
                    setTimeout(function () {
                        window.location.href = "/details/"+formdata.field.key;
                    },300)
                }else{
                    layer.msg(data.msg);
                }
            },"json").error(function () {
                layer.msg("網(wǎng)絡(luò)異常")
            });
            // 此處一定要return false厂财,阻止瀏覽器默認(rèn)事件芋簿,如果沒有這段代碼,form表單提交會直接刷新頁面璃饱,走瀏覽器默認(rèn)事件与斤。
            return false;
        })
    })
</script>

3. 數(shù)據(jù)庫邏輯

3.1 修改models->message.go 文件,添加新增評論的方法荚恶,代碼如下:
func SaveMessage(message *Message) error {
    return db.Save(message).Error
}

4. 控制器邏輯調(diào)整

4.1 新增處理評論的控制器MessageController 撩穿,新增文件controllers->message.go,添加新增評論的處理方法谒撼,代碼如下(注意 注解都是邏輯說明)
// 評論處理的控制器
type MessageController struct {
    BaseController
}
// 新增評論的控制器方法
//@router /new/:key [post]
func(this *MessageController) NewMessage()  {
    // 新增評論食寡,必須用戶登陸
    this.MustLogin()
    // 獲取文章的key
    key:= this.Ctx.Input.Param(":key")
    // 獲取評論的內(nèi)容
    content := this.GetMustString("content","請輸入內(nèi)容!")
    // 新增一個評論的唯一key
    k := this.UUID()
    // 定義評論結(jié)構(gòu)體廓潜,保存評論
    m:=&models.Message{
        Key:k,
        NoteKey:key,
        User:this.User,
        UserId:int(this.User.ID),
        Content:content,
    }
    if err:=models.SaveMessage(m);err!=nil{
        //報錯失敗抵皱,提示頁面錯誤
        this.Abort500(syserror.New("保存失敗",err))
    }
    // 提示保存成功
    this.JSONOkH("保存成功!",nil);
}
4.2 我需要將MessageController控制器 注入beego的Include上辩蛋。修改routers->router.go 呻畸,修改代碼如下:
...
beego.AddNamespace(
        ...
        beego.NewNamespace(
            "message",
            beego.NSInclude(&controllers.MessageController{}),
        ),
    )

文章評估的功能已經(jīng)實現(xiàn)


顯示文章的評論

1. 數(shù)據(jù)庫邏輯調(diào)整

1.1 添加根據(jù)文章的key查詢文章評論的功能,修改models->message.go文件,添加的代碼如下:
func QueryMessagesByNoteKey(notekey string) (ms []*Message ,err error)  {
        //Preload("User") 這是預(yù)加載悼院,關(guān)聯(lián)出與評論表相關(guān)聯(lián)的用戶信息伤为,顯示評論需要用戶的信息。
    return  ms,db.Preload("User").Where("note_key = ? ",notekey).Order("updated_at desc").Find(&ms).Error
}

2. 控制器邏輯調(diào)整

2.1 修改進(jìn)入文章詳情的控制器邏輯据途,添加抓取評論信息的邏輯绞愚。修改controllers->index.go ,修改代碼如下
//@router /details/:key [get]
func (this *IndexController) GetDetails() {
    ...
    // 查詢文章評論
    ms,err:=models.QueryMessagesByNoteKey(key)
    if err!=nil{
        //查詢出錯提示“文章不存在”
        this.Abort500(syserror.New("文章不存在",err))
    }
    this.Data["messages"] = ms
    this.TplName="details.html"
}

3.前臺頁面調(diào)整

3.1 修改前臺頁面 views->details.html頁面叙甸,循環(huán)變量messages,顯示文章評論內(nèi)容,修改代碼如下:
<div id="LAY-msg-box">
    {{range .messages }}
    <div class="info-item">
        <img class="info-img" src="/static/images/info-img.png" alt="">
        <div class="info-text">
            <p class="title count">
                <span class="name">{{.User.Name}}</span>
                <span class="info-img like"><i class="layui-icon layui-icon-praise"></i>{{.Praise}}</span>
            </p>
            <p class="info-intr">{{.Content}}</p>
        </div>
    </div>
    {{end}}
</div>

顯示文章的評論,我們已經(jīng)實現(xiàn)爽醋。


貼個頁面效果圖
3.gif


廣告:

  1. 本專集也做了視頻教程 : B站地址 蚁署,前期可能視頻和專集有的細(xì)微差別,望大家諒解蚂四。歡迎大家關(guān)注光戈。
  2. 支持作者:你可以點贊 github、關(guān)注B站遂赠。也可以打賞作者久妆。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市跷睦,隨后出現(xiàn)的幾起案子筷弦,更是在濱河造成了極大的恐慌,老刑警劉巖抑诸,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件烂琴,死亡現(xiàn)場離奇詭異,居然都是意外死亡蜕乡,警方通過查閱死者的電腦和手機(jī)奸绷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來层玲,“玉大人号醉,你說我怎么就攤上這事⌒量椋” “怎么了畔派?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長润绵。 經(jīng)常有香客問我线椰,道長,這世上最難降的妖魔是什么尘盼? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任士嚎,我火速辦了婚禮,結(jié)果婚禮上悔叽,老公的妹妹穿的比我還像新娘莱衩。我一直安慰自己,他們只是感情好娇澎,可當(dāng)我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布笨蚁。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪括细。 梳的紋絲不亂的頭發(fā)上伪很,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天,我揣著相機(jī)與錄音奋单,去河邊找鬼锉试。 笑死,一個胖子當(dāng)著我的面吹牛览濒,可吹牛的內(nèi)容都是我干的呆盖。 我是一名探鬼主播,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼贷笛,長吁一口氣:“原來是場噩夢啊……” “哼应又!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起乏苦,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤株扛,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后汇荐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體洞就,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年掀淘,在試婚紗的時候發(fā)現(xiàn)自己被綠了奖磁。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡繁疤,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出秕狰,到底是詐尸還是另有隱情稠腊,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布鸣哀,位于F島的核電站架忌,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏我衬。R本人自食惡果不足惜叹放,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望挠羔。 院中可真熱鬧井仰,春花似錦、人聲如沸破加。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至合是,卻和暖如春了罪,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背聪全。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工泊藕, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人难礼。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓娃圆,卻偏偏與公主長得像,于是被迫代替她去往敵國和親鹤竭。 傳聞我的和親對象是個殘疾皇子踊餐,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容