Golang:使用Iris打造一款个人博客(二)

上一篇 使用Iris打造一款个人博客之配置篇
现在该来看看 Iris 的视图功能了

路由模块
在 server目录下新建一个routeFun目录用来存放一些常用的路由函数
比如ajax请求服务,search文章的路由,还有一些before全局中间件等等
参考以下代码

ajax.go

package routeFuncimport ("Iris_web/server/dbServer""github.com/kataras/iris"
)func AjaxPage(ctx iris.Context) {//获取ajax返回来的 pk 参数page,_ := ctx.URLParamInt("pk")iris.New().Logger().Info("page:", page)iris.New().Logger().Info("get请求-->AjaxPage")ArticleServer := dbServer.Article{}count := ArticleServer.GetCounts()iris.New().Logger().Info("数据 count:", count)datas:= ArticleServer.GetPages(4, page)// iris ajax请求获取不到数据的时候居然不会报错,只会返回空你看多神奇if len(datas) != 0 {ctx.ViewData("datas", datas)if err := ctx.View("ajax_add.html"); err != nil {ctx.Application().Logger().Infof(err.Error())}}else {ctx.Application().Logger().Error("No Data ...")}}

archive.go

package routeFuncimport ("Iris_web/server/dbServer""github.com/kataras/iris""strconv"
)func ArchivesDetail(ctx iris.Context) {uuid, _ := ctx.Params().GetInt("uuid")ArticleServer := dbServer.Article{}datas,_ := ArticleServer.GetArchive(uuid)ctx.ViewData("datas", datas)if err := ctx.View("article/" + strconv.Itoa(uuid) +".html"); err != nil {ctx.Application().Logger().Infof(err.Error())}
}

search.go

package routeFuncimport ("Iris_web/server/dbServer""github.com/kataras/iris"
)func Search(ctx iris.Context){// 获取form表单search_key := ctx.FormValue("search")if search_key != "" {iris.New().Logger().Info(" Search ",search_key)SearchServer := dbServer.Article{}datas := SearchServer.GetSearch(search_key)ctx.ViewData("datas", datas)ctx.ViewData("search_key", search_key)if err := ctx.View("search.html"); err != nil {ctx.Application().Logger().Infof(err.Error())}}else {ctx.HTML("<h1>Not Search Key</h1>")}
}

web_error.go

package routeFuncimport "github.com/kataras/iris"//404
func NotFound(ctx iris.Context) {ctx.View("404.html")
}//500
func InternalServerError(ctx iris.Context) {ctx.WriteString("凉凉,服务器错误")
}

数据库服务
在上面的代码中比如文章详情路由中需要数据库查询的数据依赖
所以要实现数据库操作的功能,方便调用

在 server目录下新建一个dbServer 目录用来存放一些常用的数据库操作代码
参考以下代码
article_server.go

package dbServerimport ("Iris_web/datasource""Iris_web/models""time"
)type Article struct{models.Article
}func (ae *Article) CreateArticle() error{return datasource.Db.Create(ae).Error
}func (ae *Article) GetCounts() (count int64){datasource.Db.Model(ae).Count(&count)return
}func (ae *Article) GetSearch(key string) (articleList []Article) {datasource.Db.Model(ae).Where( "title LIKE ?", "%"+key+"%").Or("content LIKE ?", "%"+key+"%").Find(&articleList)return
}func (ae *Article) GetArticleList() (articleList []Article){datasource.Db.Find(&articleList)return
}func (ae *Article) GetId() (articleList []Article, err error) {datasource.Db.Model(ae).Where("id = ?", 1).Find(&articleList)err = datasource.Db.Model(ae).Related(&articleList).Errorreturn
}func (ae *Article) GetArchive(uuid int) (article Article, err error) {datasource.Db.Model(ae).Where("uuid = ?", uuid).First(&article)err = datasource.Db.Model(ae).Related(&article).Errorreturn
}func (ae *Article) GetPages(pageSize int,page int) (articleList []Article){datasource.Db.Limit(pageSize).Offset((page-1)*pageSize).Find(&articleList)return
}func (ae *Article) UpdateArticle() (comments []Article, err error){datasource.Db.Model(ae).Where("id = ?", 1).Updates(map[string]interface{}{"author": 9999,"content":444444,"create_time":time.Now()})err = datasource.Db.Model(ae).Related(&comments).Errorreturn
}func (ae *Article) DeleteArticle() (err error) {err =  datasource.Db.Where("id = ?", 1).Delete(ae).Errorreturn
}

其实就是定义了 一些数据库的增删改查,然后在路由函数中调用

count_server.go

package dbServerimport ("Iris_web/datasource""Iris_web/models""github.com/jinzhu/gorm""time"
)type G_count struct{models.G_count
}func (gc *G_count) GetGc() (res G_count,err error){datasource.Db.Model(gc).Where("id = ?", 1).First(&res)err = datasource.Db.Model(gc).Related(&res).Errorreturn
}func (gc *G_count) UpdateGc(num int) *gorm.DB {return datasource.Db.Model(gc).Where("id = ?", 1).Updates(map[string]interface{}{"count":num,"create_time":time.Now()})
}

这个可以记录用户访问的总次数,也就是访问量了
可以直接放在全局中间件

事实上这么写还是有些马虎,毕竟这只是一个个人博客,以后再继续封装吧

就这样server目录就差不好写好了,差什么就补什么,反正 demo 已经给你了

如何调用

写完了这些路由函数应该如何在主文件中调用呢?
参考一些代码
main.go

package mainimport ("Iris_web/controller""Iris_web/server/routeFunc""github.com/kataras/iris""github.com/kataras/iris/mvc"
)func main() {app := iris.New()app.Logger().SetLevel("info")//全局前置//app.Use(before)//tmp := iris.HTML("./templates", ".html")tmp := iris.Django("./templates",".html") //这里使用Django模板 没办法 flask 落下的病根//自动重载模板文件tmp.Reload(true)//加载静态文件app.HandleDir("/static", "./static")  //把app.StaticWeb("/static", "./static")干掉  会报错 iris版本原因//错误处理app.OnErrorCode(iris.StatusNotFound, routeFunc.NotFound)app.OnErrorCode(iris.StatusInternalServerError, routeFunc.InternalServerError)//注册进去app.RegisterView(tmp)archives := app.Party("/article")archives.Get("/{uuid:int}", routeFunc.ArchivesDetail)app.Get("/ajaxPage", routeFunc.AjaxPage)app.Get("/search", routeFunc.Search)

路由篇也就差不多这样了(毕竟需求不大,不过思路有了,需求算个屁)

ps:这个系列的文章还是有一些门槛的,我跳过了一些基础的东西
一些demo可以直接参考Iris 中文文档 https://learnku.com/docs/iris-go

欢迎转载,但要声明出处,不然我顺着网线过去就是一拳。
个人技术博客:http://www.gzky.live

使用 Iris 打造一款个人博客(视图路由篇)相关推荐

  1. 如何打造优秀的个人博客

    最近笔者这在准备个人博客的上线,相信很快就能和大家见面了.那么我们都知道,个人博客的时代随着互联网的发展正慢慢崛起,而且在个人博客的领域中出现了那么几位精英,像:卢松松.ZAC.月光博客等,我在做自己 ...

  2. 安卓开发笔记——打造属于自己的博客园APP(一)

    最近事情比较多,博客更新又落下了,平时有个习惯,喜欢睡前看看博客园里博友的文章,但一直感觉APP市场上下载下来的博客园客户端用起来并不是很舒服,近来发现博客园也有对外开放的数据接口,所以打算自己写个博 ...

  3. 免费分享3款WordPress博客主题

    免费分享3款WordPress博客主题,喜欢的可以看看 基于该主题搭建的博客可以在移动端和桌面端正常友好地展示.友好界面设计,针对软件下载设计的界面,包括清晰的软件列表.专业的软件详情及软件下载交互设 ...

  4. 有哪些值得关注的技术博客(PHP篇)

    有哪些值得关注的技术博客(PHP篇) 路人甲 · 3 个月前 大部分程序员在自学的道路上不知道走了多少坑,这个视频那个网站搞得自己晕头转向.对我个人来说我平常在学习的过程中喜欢看一些教程式的博客.这些 ...

  5. 基于Hexo和Github的炫酷个人博客(进阶篇)

    基于Hexo和Github的炫酷个人博客(基础篇) 基于Hexo和Github的炫酷个人博客(进阶篇) 网页底部加上浏览量 打开/themes/next/layout/_partials/footer ...

  6. 基于Hexo和Github的炫酷个人博客(基础篇)

    什么是hexo Hexo 是一个快速.简洁且高效的博客框架.Hexo 使用 Markdown(或其他渲染引擎)解析文章,在几秒内,即可利用靓丽的主题生成静态网页.       本文采用最新的Hexo版 ...

  7. 基于 abp vNext 和 .NET Core 开发博客项目 - 终结篇之发布项目

    基于 abp vNext 和 .NET Core 开发博客项目 - 终结篇之发布项目 转载于:https://github.com/Meowv/Blog 既然开发完成了,还是拿出来溜溜比较好,本篇是本 ...

  8. 基于 abp vNext 和 .NET Core 开发博客项目 - 博客接口实战篇(五)

    基于 abp vNext 和 .NET Core 开发博客项目 - 博客接口实战篇(五) 转载于:https://github.com/Meowv/Blog 上篇文章完成了文章详情页数据查询和清除缓存 ...

  9. 基于 abp vNext 和 .NET Core 开发博客项目 - 博客接口实战篇(四)

    基于 abp vNext 和 .NET Core 开发博客项目 - 博客接口实战篇(四) 转载于:https://github.com/Meowv/Blog 上篇文章完成了文章增删改的接口和友情链接列 ...

最新文章

  1. anaconda: import numpy报错:ImportError: DLL load failed: 找不到指定的模块。
  2. arduino红外遥控库IRremote的IRsend类sendRaw函数溢出问题及其解决方法
  3. 实现对HDFS增删改查CRUD等操作
  4. 用Scikit-learn和TensorFlow进行机器学习(三)
  5. 【STM32】定时器程序
  6. Django中使用ajax技术概述
  7. Hey! 首先祝贺 SpaceX 发射成功,其次我黑了 NASA 某IT 承包商网络哟~
  8. Software caused connection abort: socket write error 问题原因推测
  9. 使用python玩转dicom文件——医学图像处理工具pydicom入门教程
  10. 重磅:使用UOS微信桌面版协议登录,wechaty免费版web协议重放荣光
  11. 柔性电流传感器(柔性电流探头)的工作原理和特点是什么?
  12. 佛祖保佑永无Bug—— 最好用的注释插件
  13. 帆软FineBI随时记
  14. SRM 597div2 1K
  15. R可视化07|ggplot2图层-标度图层(scale layer)-颜色盘篇
  16. 麦本本小麦5笔记本U盘装win10系统详细操作
  17. MinIO历史版本下载
  18. 解决dotnetfx35和dotnetfx35SP1在线安装慢的问题
  19. 助力数据运营 | 京东支付-猎户数据监控平台
  20. ubuntu gcc 安装 使用

热门文章

  1. “以虫为名”?新华三这波发布有点儿别出心裁……
  2. vo2dto使用指南
  3. c语言程序设计的水电费问题,C语言程序设计A综合程序设计.pptx
  4. Siebel界面的搭建
  5. php两个数组之间去重,php数组去重、魔术方法、redis常用数据结构及应用场景
  6. 云南专升本-数据结构知识总结和常考例题(一)
  7. 实验1:猴子摘香蕉问题的Python编程实现
  8. Printf全家桶,fprintf、sprintf等
  9. 向U盘拷贝文件,总是提示对于目标系统,文件过大??
  10. iOS开发 转屏控制 (shouldAutorotate/supportedInterfaceOrientations)不起作用