和lock一塊兒學beego 博客系統開發爲例(五)

接着上篇來寫《和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}}">&laquo;</a></li>
      {{else}}
      <li class="disabled"><a>首頁</a></li>
      <li class="disabled"><a>&laquo;</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}}">&raquo;</a></li>
      <li><a href="{{.paginator.PageLinkLast}}">尾頁</a></li>
      {{else}}
      <li class="disabled"><a>&raquo;</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全局的定義及全局初始化方法定義與使用

三、在模板中如何使用本身方法

  • SetSession(name string, value interface{})
  • GetSession(name string) interface{}
  • DelSession(name string)
相關文章
相關標籤/搜索