【Go web開發之revel+mgo】第8章 實現Email牆

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

示範地址   http://gblog-revel.herokuapp.com/


1.設計Email牆頁面

呀,什麼是email牆啊,這,博主,隨便扯了點東西把,不知到大家西部喜歡,先來做,後面看效果吧。
首先在views/App下建立Emails.html 內容:

{{set . "title" "Email list - GBlog"}}{{set . "ema" "active" }}{{template "header.html" .}}<div class="content">    <div class="email-nav" >      <span class="email-tag">        <img src="http://www.gravatar.com/avatar/8b801bb6de1a876f7df749cedb8994a6?s=64" style="border-radius:32px"/>        <span>jov123@163.com</span>       </span>    </div>  </div>  </div>  </body></html>
其中,img的url裡面那一串,是博主自己的email加密後的串。後面會教大家怎麼做這個東西。
在controllers/app.go加入方法:
func (c App) Emails() revel.Result {return c.Render()}

conf/routes添加路由:
GET     /email                               App.Emails

ok,看看效果:


好的,現在來實現它。

2.實現email牆

首先在models下建立email.go 內容:
package modelsimport ("github.com/revel/revel""labix.org/v2/mgo/bson""time""crypto/md5""io""fmt")type EmailObj struct{Email stringImgUrl stringCDate time.Time}func (dao *Dao) InsertEmail(emailObj *EmailObj) error {emailCollection := dao.session.DB(DbName).C(EmailCollection)emailObj.CDate = time.Now();h := md5.New()io.WriteString(h, emailObj.Email)  emailObj.ImgUrl = fmt.Sprintf("%x", h.Sum(nil))    fmt.Println(emailObj)_,err := emailCollection.Upsert(bson.M{"email": emailObj.Email}, emailObj)if err != nil {revel.WARN.Printf("Unable to save EmailObj: %v error %v", emailObj, err)}return err}func (dao *Dao) FindAllEmails() []EmailObj{emailCollection := dao.session.DB(DbName).C(EmailCollection)emails := []EmailObj{}query := emailCollection.Find(bson.M{}).Sort("-cdate")query.All(&emails)return emails}

看一下,insert方法,裡面我們為url做了md5加密,這個是go內建的東西,只需要引入即可,我這來簡單的使用了一下。另外,我們的mgo的Upsert方法,以email為主,如果有這個email,我們就只做更新,如果沒人,就做插入,這個策略很不錯。
好,在controllers/app.go的Emails方法裡面添加:
func (c App) Emails() revel.Result {dao, err := models.NewDao()if err != nil {c.Response.Status = 500return c.RenderError(err)}defer dao.Close()emails :=dao.FindAllEmails();return c.Render(emails)}

將views/App/Emails.html最後修改為:
{{set . "title" "Email list - GBlog"}}{{set . "ema" "active" }}{{template "header.html" .}}<div class="content">    <div class="email-nav" >      {{if .emails}}       {{range $email:= .emails}}       <span class="email-tag">        <img src="http://www.gravatar.com/avatar/{{$email.ImgUrl}}?s=64" style="border-radius:32px"/>        <span title="last update at:{{$email.CDate.Format "2006-01-02 15:04"}}">{{$email.Email}}</span>       </span>       {{end}}       {{end}}    </div>  </div>  </div>  </body></html>

恩,做完了嗎?當然沒有,我們這裡做了資料的讀取,卻沒有插入,怎麼辦呢,好,還記得我們controllers下的以w開頭的類嗎,這就是我們的入口。首先在wblog.go的Putup方法中,return之前新增內容:
newEmail := new(models.EmailObj);newEmail.Email = blog.Email;dao.InsertEmail(newEmail);

同樣在wcomment.go的Docomment方法中,return之前新增內容:
newEmail := new(models.EmailObj);newEmail.Email = comment.Email;dao.InsertEmail(newEmail);

同樣在wmessage.go的Putup方法中,return之前新增內容:
newEmail := new(models.EmailObj);newEmail.Email = message.Email;dao.InsertEmail(newEmail);

ok,這樣,不管是發blog還是評論,還是留言都會為我們增加email。來看看最後的效果:

nice,你做好了嗎?
源碼地址:https://github.com/joveth/GBlog

交流QQ:158325682



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.