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

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

这篇主要完成以下事项:

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

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

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

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

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

我们在做一个项目的时候,往往会写一些共用的方法或工具,在beego里如何去实现呢?首先看一下博客的目录结构:

红色框,就是我们定义的方法文件。你也可以根据自己的需要进行方法命名,如curl.go, smtp.go etc.这里我们相关方法都放到一个叫function的方法中,详情请看:

package utilsimport ("crypto/md5""crypto/rand""encoding/base64""encoding/hex""io""math/big""net/smtp"//"strconv""fmt""regexp""strings""time""github.com/astaxie/beego"
)//md5方法
func GetMd5String(s string) string {h := md5.New()h.Write([]byte(s))return hex.EncodeToString(h.Sum(nil))
}//Guid方法
func GetGuid() string {b := make([]byte, 48)if _, err := io.ReadFull(rand.Reader, b); err != nil {return ""}return GetMd5String(base64.URLEncoding.EncodeToString(b))
}//字串截取
func SubString(s string, pos, length int) string {runes := []rune(s)l := pos + lengthif l > len(runes) {l = len(runes)}return string(runes[pos:l])
}func GetFileSuffix(s string) string {re, _ := regexp.Compile(".(jpg|jpeg|png|gif|exe|doc|docx|ppt|pptx|xls|xlsx)")suffix := re.ReplaceAllString(s, "")return suffix
}/**  to: example@example.com;example1@163.com;example2@sina.com.cn;...*  subject:The subject of mail*  body: The content of mail*/func SendMail(to string, subject string, body string) error {user := beego.AppConfig.String("adminemail")password := beego.AppConfig.String("adminemailpass")host := beego.AppConfig.String("adminemailhost")hp := strings.Split(host, ":")auth := smtp.PlainAuth("", user, password, hp[0])var content_type stringcontent_type = "Content-type:text/html;charset=utf-8"msg := []byte("To: " + to + "\r\nFrom: " + user + "<" + user + ">\r\nSubject: " + subject + "\r\n" + content_type + "\r\n\r\n" + body)send_to := strings.Split(to, ";")err := smtp.SendMail(host, auth, user, send_to, msg)return err
}func RandInt64(min, max int64) int64 {maxBigInt := big.NewInt(max)i, _ := rand.Int(rand.Reader, maxBigInt)if i.Int64() < min {RandInt64(min, max)}return i.Int64()
}func GetDate(timestamp int64) string {tm := time.Unix(timestamp, 0)return tm.Format("2006-01-02 15:04")
}
func GetDateMH(timestamp int64) string {tm := time.Unix(timestamp, 0)return tm.Format("01-02 03:04")
}
func GetGravatar() string {i := RandInt64(1, 5)return "/static/img/avatar/" + fmt.Sprintf("%d", i) + ".jpg"
}

我们在这里定义好了这些方法后,我们如何使用呢?

其实很简单,我们在控制器里只要引用它就可以:

package controllersimport (//"fmt""blog/utils""io"//"net/http""os""strconv""strings""time""github.com/astaxie/beego"
)

引用后,在方法体中直接utils.方法,就可以。如:

ext := utils.SubString(filename, strings.LastIndex(filename, "."), 5)

是不是很简单?

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

首先看一张图:

我们初始化的一些方法,直接写在一个文件夹中,initial中,数据库的初始化是必须要进行的。

代码在前面的章节中也有介绍:

package initialimport ("fmt""github.com/astaxie/beego""github.com/astaxie/beego/orm"_ "github.com/go-sql-driver/mysql"
)func InitSql() {user := beego.AppConfig.String("mysqluser")passwd := beego.AppConfig.String("mysqlpass")host := beego.AppConfig.String("mysqlurls")port, err := beego.AppConfig.Int("mysqlport")dbname := beego.AppConfig.String("mysqldb")if nil != err {port = 3306}orm.Debug = trueorm.RegisterDriver("mysql", orm.DRMySQL)//orm.RegisterDataBase("default", "mysql", "root:@/blog?charset=utf8", 30)orm.RegisterDataBase("default", "mysql", fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8", user, passwd, host, port, dbname))}

引用了配置文件定义的变量,注册数据库。那么问题来了,注册好后,我们如何使用呢?

在上面的图片中,我看到init.go这个文件,初始化中间又加了一层过度。init.go代码如下:

package initialfunc init() {InitSql()InitTplFunc()
}

为什么要放在init这个方法体了,因为go加载方法有顺序了的。main(),init()....具体可以看一下go文档

这样,我们就可以在主入口文件中加载了main.go,如下:

package mainimport (_ "blog/routers"_ "blog/initial""fmt""html/template""net/http""github.com/astaxie/beego"
)func main() {beego.ErrorHandler("404", page_not_found)beego.Run()
}

可以看到我们在引用的时候,前面加了一个下划线,下划线的意思就是只引用init里的方法。

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

我们经常会定义一些方法,在模板视图中引用,因为自带的模板方法不能满足我们的使用,我们要定义一些与项目本身有联系的模板函数。在上面的的代码中大家看到了tplfunc了。初始化引用上面已经介绍,我们看一下代码:

package initialimport ("blog/utils""github.com/astaxie/beego"
)func InitTplFunc() {beego.AddFuncMap("date_mh", utils.GetDateMH)beego.AddFuncMap("date", utils.GetDate)beego.AddFuncMap("avatar", utils.GetGravatar)}

有没有发现,我们是引用untils下的方法,重写取了一个名子,用AddFuncMap来映射。那么如何在模板中使用呢?

 

{{$v.Title}}({{date $v.Created}})

在模板中{{方法别名 参数}},就可以了!

好了,今天就写到这里吧,下篇主要介绍:

1、单图上传

2、多图上传

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

和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. 使用sourceInsight 提高代码编写效率
  2. putty如何安装mysql_使用Linux 安装MySQL
  3. php doss_php下ddos攻击与防范代码
  4. 截图工具当前未在计算机运行
  5. 由java的八个基本数据类型说开去
  6. JavaScript入门(part12)--内置对象
  7. Java编程字符逆序输出_用JAVA编写一程序:从键盘输入多个字符串到程序中,并将它们按逆序输出在屏幕上。...
  8. netfilter que_QUE的完整形式是什么?
  9. 使用putty连接本地VirtualBox上的centos7 linux主机
  10. Angular使用echarts
  11. vc2008中如何调试dll
  12. 颜值与特色并存!各大高校“中秋限定款”月饼刷屏,你酸了吗?
  13. 《Maya 2009高手之路》-115网盘下载
  14. 直播平台常见直播礼物介绍
  15. 百度地图Android开发清除上一次驾车导航路线
  16. 自然人独资企业要上缴哪些税
  17. 既生左,何生曾——曾国藩与左宗棠一生恩怨考
  18. 北航计算机学院教授马帅,北航离散数学大一课件(马帅)指南.pdf
  19. 【转载】SCI投稿过程总结、投稿状态解析、拒稿后对策及接受后期相关问答
  20. 等保测评(windows)

热门文章

  1. 1_Linux基础知识及命令————登陆登出及图形化界面的初始化
  2. 在Eclipse中制作SSH配置文件提示插件
  3. linux --- 进程调度
  4. Android 中文API(86)——ResourceCursorAdapter
  5. 【转】python包导入细节
  6. 《并行计算的编程模型》一2.4.1 GASNet段
  7. 查询当前Oracle数据库的实例
  8. 闽台“物联网+”产业融合方兴未艾
  9. AndroidStudio 解决Android方法数超过65535的问题
  10. CSS-用伪元素制作小箭头(轮播图的左右切换btn)