为什么80%的码农都做不了架构师?>>>   

接着上篇来写《和lock一起学beego 博客系统开发为例(四)》

这篇主要完成以下事项:

下篇我们要完成下面三个任务:

1、模板的使用

2、基控制器BaseController的定义

3、session的使用

一、模板的使用

接着上篇文章,这里也是以article为例,在后面会把完整的代码发布到github上!

在article控制器里有三个Get方法,分别是:

1、article.tpl 列表

2、article-detail.tpl 详情

3、article-form.tpl 博客的发布与编辑

在控制器里:可以看上篇,在 控制器方法有写

this.Data["paginator"] = paginator
this.Data["art"] = art
this.TplName = "article.tpl"

1、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上。

二、基控制器BaseController的定义

因为我们的博客没有独立的后台,在前台里可以发布和编辑的,在上面的模板中我们看到$.isLogin来判断!

那这个怎么定义了,看如下:

package controllersimport ("github.com/astaxie/beego"
)type BaseController struct {beego.ControllerisLogin 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来验证是否登录。这样在每个控制器都可以引用这个变量,上面的模板中也有引用。

三、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目录。

好了,今天到此结束,下篇会说:

1、第三方工具方法的定义

2、mysql全局的定义及全局初始化方法定义与使用

3、在模板中如何使用自己方法

  • SetSession(name string, value interface{})
  • GetSession(name string) interface{}
  • DelSession(name string)

转载于:https://my.oschina.net/lockupme/blog/694102

和lock一起学beego 博客系统开发为例(五)相关推荐

  1. 和lock一起学beego 博客系统开发为例(六)

    为什么80%的码农都做不了架构师?>>>    接着上篇来写<和lock一起学beego 博客系统开发为例(五)> 这篇主要完成以下事项: 下篇我们要完成下面三个任务: ...

  2. 视频教程-python项目之博客系统开发-Python

    python项目之博客系统开发 TriAquae开源运维软件创始人,混迹IT运维领域多年,曾就职于松下.国政通.飞信.中金.NOKIA等公司,维护过少至几十台,多至数万台设备的IT系统,致力于提高企业 ...

  3. 【SSM架构】博客系统开发(七)-登陆界面

    [SSM架构]博客系统开发7-登陆界面 1 完成效果 2 建login.jsp 3 导入静态资源 4 建login.jsp 5 配置springmvc 6 发布项目,在浏览器地址栏访问 7 所需文件下 ...

  4. 个人博客系统开发总结之 mybatis操作blob字段

    mybaits通过mapper文件进行数据库的增删改查操作,在进行增删改查操作时需要将java的数据类型与数据库的数据类型进行转换,此时就会用到TypeHandler类型处理器.mybatis内置了j ...

  5. python项目之博客系统开发-李杰-专题视频课程

    python项目之博客系统开发-3133人已学习 课程介绍         系统由于主站.个人博客.后台管理三部分组成,其中包含Web开发中的知识,如:多级评论.文章点赞.主题定制.iframe伪Aj ...

  6. JSP~Qing博客系统开发

    本篇文章主要对自己做的一个C#识别软件.一个Web博客系统做项目总结. 一.ToTool识别转换助手 软件打包之后在我电脑上运行正常,识别印刷体没有问题,但在不同系统不同电脑下运行会出问题.因为核心算 ...

  7. uliweb新教程--多人博客系统开发

    2019独角兽企业重金招聘Python工程师标准>>> 开始写一个uliweb的新教程,主要围绕着一个多人博客系统的开发来写.下面是我想实现的功能: blog功能 blog首页展示 ...

  8. 个人博客系统开发总结之 lucene全文检索

    博客系统前台提供搜索功能,希望不仅仅是通过文章标题.摘要来模糊搜索,而是可以跟文章内容进行匹配.由于文章内容在数据库中使用blob字段存储,无法使用数据库进行模糊查询.于是决定采用Lucene全文检索 ...

  9. 个人博客系统开发总结之 第三方登录(QQ、微博)

    当别人访问我的博客系统时,如果需要评论,就需要登录.如果此时要求注册,就比较麻烦,并且会引起访问者的反感.于是就采用第三方登录.目前支持QQ.微博登录. QQ登录 QQ互联开放平台为第三方网站提供了丰 ...

最新文章

  1. 活动报名 | 智源重大研究方向:自然语言处理暨“北京智源-京东跨媒体对话智能联合实验室”发布会...
  2. nodejs的web开发框架了解一下
  3. Sitemesh 3 的使用及配置
  4. excel趋势线公式导出_Java 添加、读取、删除Excel中的图表趋势线
  5. [C++11]initializer_lisr模板类的使用
  6. spring----Bean的生命周期和循环依赖
  7. python中回车怎么表示_如何在python中使用读取行仅拆分回车符?
  8. C# list 多条件排序
  9. vivo z5和z5x有什么区别
  10. kettle将文件路径定义为_Kettle变量和自己定义java代码的实例应用
  11. MongoDB 在windows shell环境下的基本操作和命令的使用示例(一)
  12. java中的数据结构——图
  13. 如何更有效的进行面试
  14. 74LVC1G3157GW
  15. asp服务器管理系统,ASP服务器软件
  16. 【安全牛学习笔记】扫描工具-Nikto
  17. rrpp协议如何修改_产品技术-RRPP技术介绍-新华三集团-H3C
  18. 中南民族大学 计算机科学学院,中南民族大学 计算机科学学院 蒋天发老师简介 联系方式 手机电话 邮箱...
  19. java web excel导入数据库
  20. 09 嵌入式C语言如何实现多级队列缓存(Queue、FIFO)

热门文章

  1. 树莓派Raspberry Pi 16G SD卡刷系统时默认空间扩容
  2. 在IOS开发中根据(id)sender获取UIButton的信息
  3. android开发我的新浪微博客户端-用户授权页面UI篇(3.1)
  4. 一致性哈希算法及其在分布式系统中的应用
  5. VMware View 与Citrix XenDesktop对决之用户体验篇
  6. 你了解 Performance Timeline Level 2 吗?
  7. WPF中触发器Trigger、MultiTrigger、DataTrigger、MultiDataTrigger、EventTrigger几种
  8. Net设计模式实例之建造者模式(Builder Pattern)(2)
  9. 那些参加过创业赛事活动的创业者后来怎么样了?
  10. Java服务部署规范(内部使用)