接着上篇來寫《和lock一塊兒學beego 博客系統開發爲例(四)》html
這篇主要完成如下事項:mysql
下篇咱們要完成下面三個任務:git
一、模板的使用github
二、基控制器BaseController的定義redis
三、session的使用sql
1、模板的使用cookie
接着上篇文章,這裏也是以article爲例,在後面會把完整的代碼發佈到github上!session
在article控制器裏有三個Get方法,分別是:ide
一、article.tpl 列表工具
二、article-detail.tpl 詳情
三、article-form.tpl 博客的發佈與編輯
在控制器裏:能夠看上篇,在 控制器方法有寫
this.Data["paginator"] = paginator this.Data["art"] = art this.TplName = "article.tpl"
一、article.tpl模板
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>{{config "String" "globaltitle" ""}}</title> {{template "inc/meta.tpl" .}} </head> <body> {{template "inc/head.tpl" .}} <div class="container"> <div class="row"> {{if $.isLogin }} <div class="col-lg-8 pull-right"> <form class="form-search"> <div class="col-xs-2"> <a href="/article/add" target="_blank" class="btn btn-success"> + New Blog</a> </div> <div class="col-xs-4"> <select name="status" class="form-control"> <option value="">選擇狀態</option> <option value="0">屏蔽</option> <option value="1">正常</option> </select> </div> <div class="input-group"> <input type="text" name="title" class="form-control" placeholder="請輸入標題"> <span class="input-group-btn"> <button class="btn btn-primary" type="submit">Search</button> </span> </div> </form> </div> <div class="clearfix"></div> {{end}} {{range $k,$v := .art}} <div class="media"> <div class="media-body"> <h4 class="media-heading"><a href="/article/{{$v.Id}}" title="{{$v.Title}}">{{$v.Title}}</a>({{date $v.Created}})</h4> <p>{{$v.Summary}}</p> {{if $.isLogin }}<p class="pull-right">{{if eq $v.Status 0}}<button type="button" class="btn btn-primary btn-xs">屏蔽</button>{{end}} <a href="/article/edit/{{$v.Id}}" class="btn btn-danger">修改</a></p>{{end}} </div> </div> {{end}} {{if .paginator.HasPages}} <ul class="pagination pagination"> {{if .paginator.HasPrev}} <li><a href="{{.paginator.PageLinkFirst}}">首頁</a></li> <li><a href="{{.paginator.PageLinkPrev}}">«</a></li> {{else}} <li class="disabled"><a>首頁</a></li> <li class="disabled"><a>«</a></li> {{end}} {{range $index, $page := .paginator.Pages}} <li{{if $.paginator.IsActive .}} class="active"{{end}}> <a href="{{$.paginator.PageLink $page}}">{{$page}}</a> </li> {{end}} {{if .paginator.HasNext}} <li><a href="{{.paginator.PageLinkNext}}">»</a></li> <li><a href="{{.paginator.PageLinkLast}}">尾頁</a></li> {{else}} <li class="disabled"><a>»</a></li> <li class="disabled"><a>尾頁</a></li> {{end}} </ul> {{end}} </div> </div> </body> </html>
在說模板中引用配置文件能夠用{{config 類型 名稱鍵 默認值}},這樣能夠 定義全局變量如網站名稱等
模板中列表用rang方法來顯示循環,下面有一個分頁的程序,能夠看一下
其它的模板相似,後續會發布到github上。
2、基控制器BaseController的定義
由於咱們的博客沒有獨立的後臺,在前臺裏能夠發佈和編輯的,在上面的模板中咱們看到$.isLogin來判斷!
那這個怎麼定義了,看以下:
package controllers import ( "github.com/astaxie/beego" ) type BaseController struct { beego.Controller isLogin bool } func (this *BaseController) Prepare() { userLogin := this.GetSession("userLogin") if userLogin == nil { this.isLogin = false } else { this.isLogin = true } this.Data["isLogin"] = this.isLogin } func (this *BaseController) Go404() { this.TplName = "404.tpl" return }
說明:咱們在控制器裏創建了一個base.go做爲基類,每一個控制器都繼承這個控制器;讓咱們回顧一下前面控制器介紹的:
//添加blog type AddArticleController struct { BaseController }
都繼承這個控制器。在beego中,有個預處理的Prepare方法,這個方法會在其它方法執行前操做,能夠用做用戶登陸驗證之類的。在基類中也重定義了一個參數isLogin來驗證是否登陸。這樣在每一個控制器均可以引用這個變量,上面的模板中也有引用。
3、session 的使用
在上面的控制器中,你們也看到session的使用。session有最基本的三個方法:
在獲取session的時候,你們要注意一下,類型要進行轉換:
strn := this.GetSession("uploadMultiName") strn = strings.Trim(strn.(string), "||")
記得用.string來進行轉換,其它類型也這樣的,不能直接string來進行轉換。
固然session要記得開啓,能夠在配置文件中開啓。
beego默認是memory存儲,固然你可使用其它的file,memcache,redis,mysql等,這裏介紹使用file的使用
sessionon = true #sessionprovider = memory sessionprovider = file sessionproviderconfig = "./tmp" sessiongcmaxlifetime = 31536000 sessioncookielifetime = 31536000
在這裏說明一下,新版中
SessionSavePath
已經被sessionproviderconfig替換掉了,官方文檔也沒有更新,在此特地說明一下,不替換的話,file指定目錄會不啓做用,會在根目錄生成hash目錄。
好了,今天到此結束,下篇會說:
一、第三方工具方法的定義
二、mysql全局的定義及全局初始化方法定義與使用
三、在模板中如何使用本身方法