书接上回,上次我们搭建好了项目入口文件,同时配置了路由体系,接着就可以配置项目的模板了,这里我们采用Iris内置的模板引擎,事实上,采用模板引擎并不意味着前后端耦合,模板中的数据保持其独立性即可,也就是说模板的数据操作交互方式采用http接口请求的形式,Iris并不参与模板逻辑,只返回Json格式的数据即可。前端集成数据双向绑定机制的框架Vue.js。

配置模板

Iris支持但不限于下面几种模板引擎:

#    Name    Parser
1   HTML    html/template
2   Blocks  kataras/blocks
3   Django  flosch/pongo2
4   Pug Joker/jade
5   Handlebars  aymerick/raymond
6   Amber   eknkc/amber
7   Jet CloudyKit/jet
8   Ace yosssi/ace

这里我们使用默认的引擎html/template,参见模板语法文档示例:https://github.com/kataras/iris/tree/master/_examples/view

编写main.go文件:

tmpl := iris.HTML("./views", ".html")

这里声明并赋值tmpl变量,传入模板文件夹以及模板文件后缀两个参数。

随后在项目根目录创建views文件夹:

mkdir views
cd views

接着建立模板文件test.html:

<html>
<head>  <title>首页</title>
</head>
<body>  <h1>${.message}</h1>
</body>
</html>

这是一个简单的测试模板,打印变量.message。

随后添加模板配置:

tmpl.Delims("${", "}")  tmpl.Reload(true)  app.RegisterView(tmpl)

这里添加模板的通配符,采用${},避免和Vue的打印模板语法{{}}冲突,然后开启修改后重新加载的模式,防止模板被缓存,最后注册模板。

最后,在路由函数内解析模板:

app.Get("/", func(ctx iris.Context) {  ctx.ViewData("message", "你好,女神")  ctx.View("test.html")  })

编译后访问http://localhost:5000

这里通过ctx.ViewData函数将message变量传递给模板,然后渲染.message

这只是最简单的模板解析,我们还需要让Iris提供静态文件的服务支持,否则模板将无法加载样式文件或者是Js文件:

app.HandleDir("/assets", iris.Dir("./assets"))

这里将根目录的assets文件作为静态文件目录进行解析。

随后将项目的css文件和js文件放入assets对应目录,接着编写index.html首页模板:

<!DOCTYPE html>
<html lang="zh-CN">  <head>  <meta http-equiv="Content-Type" content="text/html;charset=utf-8">  <meta http-equiv="X-UA-Compatible" content="IE=edge">  <meta name="viewport" content="width=device-width, initial-scale=1">  <meta name="applicable-device" content="pc,mobile" />  <title>刘悦-刘悦分享-刘悦的技术博客-讲师刘悦-刘悦简历</title>
<meta content="刘悦的技术博客,刘悦简历,python编程,git,mac,centos,ruby编程,linux,golang编程,vue.js,Docker容器技术" name="keywords">
<meta content="刘悦-刘悦分享-刘悦的技术博客-讲师刘悦-刘悦简历" name="description">
<meta content="index,follow" name="robots">
<meta content="index,follow" name="GOOGLEBOT">
<meta content="刘悦"  name="Author">  <meta http-equiv="expires" content="4500"/>  <link rel="stylesheet" href="../assets/css/style.css"  />  <script src="../assets/js/axios.js"></script>  <script src="../assets/js/vue.js"></script>  </head>

这里通过link和script标签将需要的样式和Js标准库引入:分别是style.css、Vue.js和axios.js文件

随后,添加id标识:

<div id="app">

接着在body标签外侧添加Vue初始化逻辑:

<script>  const App = {  data() {  return {  message: "Hello Tornado",  };  },  created: function() {  console.log("你好,女神");  },  methods: {  },  };
const app = Vue.createApp(App);
app.config.globalProperties.axios = axios;
app.mount("#app");  </script>

这里当Iris模板渲染时,自动初始化Vue框架,前端交互留给Vue.js。

如果愿意,网站的icon也可以交给Iris渲染:

app.Favicon("./favicon.ico")

接着修改main.go逻辑,改为渲染首页模板:

app.Get("/", func(ctx iris.Context) {  ctx.ViewData("message", "你好,女神")  ctx.View("index.html")  })

访问http://localhost:5000:

如此,Iris模板和静态服务就配置好了。

配置数据库

Iris项目需要将数据存储在数据库中,这里使用Gorm包,安装方式详见:百亿数据百亿花, 库若恒河沙复沙,Go lang1.18入门精炼教程,由白丁入鸿儒,Go lang数据库操作实践EP12

随后修改main.go文件:

db, err := gorm.Open("mysql", "root:root@(localhost)/irisblog?charset=utf8mb4&parseTime=True&loc=Local")  if err != nil {  fmt.Println(err)  panic("无法连接数据库")  }  fmt.Println("连接数据库成功")  //单数模式  db.SingularTable(true)  // 创建默认表  db.AutoMigrate(&model.User{})  // 逻辑结束后关闭数据库  defer func() {  _ = db.Close()  }()

这里通过mysql驱动连接数据库,注意默认启动会通过结构体创建用户表。

随后在根目录创建模型包:

mkdir model
cd model

接着创建数据模型包:

package model  import (  "time"  "github.com/jinzhu/gorm"
)  type Model struct {  ID        uint `gorm:"primary_key"`  CreatedAt time.Time  UpdatedAt time.Time  DeletedAt *time.Time
}  type User struct {  gorm.Model  Username string  Password string
}

这里通过结构体的属性传递,可以让User结构体具备Gorm内置的Model结构体的字段,类似“继承”的方式。

最后,封装Iris结构体,将db变量传递进去:

package main  import (  "IrisBlog/model"  "fmt"  "github.com/jinzhu/gorm"  _ "github.com/jinzhu/gorm/dialects/mysql"  "github.com/kataras/iris/v12"
)  func main() {  db, err := gorm.Open("mysql", "root:root@(localhost)/irisblog?charset=utf8mb4&parseTime=True&loc=Local")  if err != nil {  fmt.Println(err)  panic("无法连接数据库")  }  fmt.Println("连接数据库成功")  //单数模式  db.SingularTable(true)  // 创建默认表  db.AutoMigrate(&model.User{})  // 逻辑结束后关闭数据库  defer func() {  _ = db.Close()  }()  app := newApp(db)  app.HandleDir("/assets", iris.Dir("./assets"))  app.Favicon("./favicon.ico")  app.Listen(":5000")
}  func newApp(db *gorm.DB) *iris.Application {  app := iris.New()  tmpl := iris.HTML("./views", ".html")  // Set custom delimeters.  tmpl.Delims("${", "}")  // Enable re-build on local template files changes.  tmpl.Reload(true)  app.RegisterView(tmpl)  app.Get("/", func(ctx iris.Context) {  ctx.ViewData("message", "你好,女神")  ctx.View("index.html")  })  return app  }

如此,数据库就配置好了,当前的项目结构如下:

IrisBlog
├── assets
│ ├── css
│ │ └── style.css
│ └── js
│     ├── axios.js
│     └── vue.js
├── favicon.ico
├── go.mod
├── go.sum
├── main.go
├── model
│ └── model.go
├── tmp
│ └── runner-build
└── views  ├── index.html  └── test.html

结语

本次我们完成了项目模板和数据库的配置,并且在战略层面重新规划了项目结构,正道是:雄关漫道真如铁,而今迈步从头越,该项目已开源在Github:https://github.com/zcxey2911/IrisBlog ,与君共觞,和君共勉。

彩虹女神跃长空,Go语言进阶之Go语言高性能Web框架Iris项目实战-模板与数据库EP02相关推荐

  1. 急如闪电快如风,彩虹女神跃长空,Go语言高性能Web框架Iris项目实战-初始化项目ep00

    在Golang Web编程的世界里,君不言高性能则已,言高性能必称Iris.彩虹女神的名号响彻寰宇.名动江湖,单论一个快字,无人能出其右,就连以简洁轻量著称于世的Gin也难以望其项背,只见彩虹女神Ir ...

  2. go语言原生web框架 golang项目-书城商店

    go语言原生web框架 golang项目-书城商店 golang书城商店功能介绍 书城主页 分页展示 价格搜索 登录注册 加入购物车 购买 我的订单 查看详情 后台管理 图书管理 添加修改删除图书 订 ...

  3. C语言进阶——使用C语言与gnuplot结合画一些波形

    1.用C语言产生均匀分布的随机数 (1)功能 产生(a,b)区间上均匀分布的随机数 (2)函数简介 均匀分布函数的概率密度函数为 f(x)={1b−a,a≤x≤b0,其它f(x)=\begin{cas ...

  4. 【C语言进阶】C语言程序设计:动态通讯录(顺序表实现)

    目录 动态通讯录的实现 一.实验的目的和意义 二.实验内容描述 三.功能描述 四.数据结构 1.三大模块 2.结构设计 3.动态开辟 4.文件操作 5.主要函数 五.流程图及模块算法 1.Contac ...

  5. 【C语言进阶】C语言实现通讯录

    目录 一.引言 二.如何实现通讯录 1.通讯录要求 2.创建主菜单 3.初步设置主函数 4.创建通讯录 5.初始化通讯录 6.case 1(增加联系人) 7.case 5(显示通讯录中的信息) 8.c ...

  6. c语言进阶.pdf,C语言程序设计进阶:文件.pdf

    格式化输⼊输出 格式化的输⼊输出 • printf • %[flags][width][.prec][hlL]type • scanf • %[flag]type %[flags][width][.prec ...

  7. mxgraph进阶 三 Web绘图——mxGraph项目实战 精华篇

    Web绘图--mxGraph项目实战(精华篇) 声明 本文部分内容所属论文现已发表,请慎重对待. 需求 由于小论文实验需求,需要实现根据用户日志提取出行为序列,然后根据行为序列生成有向图的形式,并且连 ...

  8. mxgraph进阶(三)Web绘图——mxGraph项目实战(精华篇)

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! Web绘 ...

  9. mxgraph进阶(三)Web绘图—mxGraph项目实战

    由于小论文实验需求,需要实现根据用户日志提取出行为序列,然后根据行为序列生成有向图的形式,并且连接相邻动作的弧上标有执行此次相邻动作的频次,每个动作另附有一个数据集,这样有向图加数据集就构成了用户交互 ...

  10. Go语言优秀Web框架

    一.框架 Beego: 一个Go语言下开源的,高性能Web框架 * https://github.com/astaxie/beego * https://beego.me Buffalo: 一个Go语 ...

最新文章

  1. Centos配置终端的快捷键
  2. Android异步下载
  3. 走出迷茫和怀疑,迎接在神策冒险的新时代
  4. LeetCode Algorithm 876. 链表的中间结点
  5. JQuery:JQuery添加元素
  6. 点乘叉乘坐标公式_点积与叉乘的运算与物理意义
  7. matlab var求方差
  8. 用计算机唱出惊雷,除了《惊雷》还有多少喊麦神曲?这十首神作你一定听过!...
  9. 底层主播生存录:玩不好算法,去不了塔尖
  10. 使用git clone命令下载代码时报错出现 remote: Not Found fatal: repository 'http://xxx/xxx.git/' not found
  11. 浪涌保护器ant120_ANT120/530/1P浪涌保护器服务周到漳州
  12. Error (10200):错误的另一种可能
  13. 解决——》feign文件下载时报错feign.codec.EncodeException: not in non blocking mode
  14. isis学不到looback口的路由_随手装了台LEDE软路由,测试WAN口能否跑万兆(上篇)...
  15. “期货投资管理”的资管软件开发都需要用到什么开发语言和环境
  16. 一年三 季 醋 泡 姜
  17. 十秒钟入门一分钟搭建Discuz论坛
  18. 卧槽!Pdf转Word用Python轻松搞定!
  19. 3dmax2014植树插件_【亲测能用】3dsMax种树插件:Forest Pack Pro v6.2.1 For 2015-2020+资源库下载-羽兔网...
  20. vue3 composition(组合式)API 是什么?我为什么要使用它?

热门文章

  1. 使用Ant Design库练习React,报错bundle.js:10 Uncaught Error: Module build failed (from ./node_modules/
  2. 实战 Walker 之注册界面
  3. 中科大刘泽博士一作斩获 ICCV 2021 最佳论文奖!中国学者占「半壁江山」
  4. 122Echarts - 关系图(Les Miserables)
  5. WEB 视频开发-视频保护广告艺术
  6. 【合规性检查-Fitness】基于Token重演的拟合度评估方法
  7. 【毕业设计】java基于微信小程序高校闲置物品交易平台小程序 闲置物品交易微信小程序 闲置物品交易小程序
  8. 自媒体创作新形式—喜马拉雅有声书
  9. 自动化爬取json_python接口自动化33-json解析神器jsonpath
  10. SpringMVC+Vue实现前后端的农业信息管理系统