彩虹女神跃长空,Go语言进阶之Go语言高性能Web框架Iris项目实战-模板与数据库EP02
书接上回,上次我们搭建好了项目入口文件,同时配置了路由体系,接着就可以配置项目的模板了,这里我们采用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相关推荐
- 急如闪电快如风,彩虹女神跃长空,Go语言高性能Web框架Iris项目实战-初始化项目ep00
在Golang Web编程的世界里,君不言高性能则已,言高性能必称Iris.彩虹女神的名号响彻寰宇.名动江湖,单论一个快字,无人能出其右,就连以简洁轻量著称于世的Gin也难以望其项背,只见彩虹女神Ir ...
- go语言原生web框架 golang项目-书城商店
go语言原生web框架 golang项目-书城商店 golang书城商店功能介绍 书城主页 分页展示 价格搜索 登录注册 加入购物车 购买 我的订单 查看详情 后台管理 图书管理 添加修改删除图书 订 ...
- C语言进阶——使用C语言与gnuplot结合画一些波形
1.用C语言产生均匀分布的随机数 (1)功能 产生(a,b)区间上均匀分布的随机数 (2)函数简介 均匀分布函数的概率密度函数为 f(x)={1b−a,a≤x≤b0,其它f(x)=\begin{cas ...
- 【C语言进阶】C语言程序设计:动态通讯录(顺序表实现)
目录 动态通讯录的实现 一.实验的目的和意义 二.实验内容描述 三.功能描述 四.数据结构 1.三大模块 2.结构设计 3.动态开辟 4.文件操作 5.主要函数 五.流程图及模块算法 1.Contac ...
- 【C语言进阶】C语言实现通讯录
目录 一.引言 二.如何实现通讯录 1.通讯录要求 2.创建主菜单 3.初步设置主函数 4.创建通讯录 5.初始化通讯录 6.case 1(增加联系人) 7.case 5(显示通讯录中的信息) 8.c ...
- c语言进阶.pdf,C语言程序设计进阶:文件.pdf
格式化输⼊输出 格式化的输⼊输出 • printf • %[flags][width][.prec][hlL]type • scanf • %[flag]type %[flags][width][.prec ...
- mxgraph进阶 三 Web绘图——mxGraph项目实战 精华篇
Web绘图--mxGraph项目实战(精华篇) 声明 本文部分内容所属论文现已发表,请慎重对待. 需求 由于小论文实验需求,需要实现根据用户日志提取出行为序列,然后根据行为序列生成有向图的形式,并且连 ...
- mxgraph进阶(三)Web绘图——mxGraph项目实战(精华篇)
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! Web绘 ...
- mxgraph进阶(三)Web绘图—mxGraph项目实战
由于小论文实验需求,需要实现根据用户日志提取出行为序列,然后根据行为序列生成有向图的形式,并且连接相邻动作的弧上标有执行此次相邻动作的频次,每个动作另附有一个数据集,这样有向图加数据集就构成了用户交互 ...
- Go语言优秀Web框架
一.框架 Beego: 一个Go语言下开源的,高性能Web框架 * https://github.com/astaxie/beego * https://beego.me Buffalo: 一个Go语 ...
最新文章
- Centos配置终端的快捷键
- Android异步下载
- 走出迷茫和怀疑,迎接在神策冒险的新时代
- LeetCode Algorithm 876. 链表的中间结点
- JQuery:JQuery添加元素
- 点乘叉乘坐标公式_点积与叉乘的运算与物理意义
- matlab var求方差
- 用计算机唱出惊雷,除了《惊雷》还有多少喊麦神曲?这十首神作你一定听过!...
- 底层主播生存录:玩不好算法,去不了塔尖
- 使用git clone命令下载代码时报错出现 remote: Not Found fatal: repository 'http://xxx/xxx.git/' not found
- 浪涌保护器ant120_ANT120/530/1P浪涌保护器服务周到漳州
- Error (10200):错误的另一种可能
- 解决——》feign文件下载时报错feign.codec.EncodeException: not in non blocking mode
- isis学不到looback口的路由_随手装了台LEDE软路由,测试WAN口能否跑万兆(上篇)...
- “期货投资管理”的资管软件开发都需要用到什么开发语言和环境
- 一年三 季 醋 泡 姜
- 十秒钟入门一分钟搭建Discuz论坛
- 卧槽!Pdf转Word用Python轻松搞定!
- 3dmax2014植树插件_【亲测能用】3dsMax种树插件:Forest Pack Pro v6.2.1 For 2015-2020+资源库下载-羽兔网...
- vue3 composition(组合式)API 是什么?我为什么要使用它?
热门文章
- 使用Ant Design库练习React,报错bundle.js:10 Uncaught Error: Module build failed (from ./node_modules/
- 实战 Walker 之注册界面
- 中科大刘泽博士一作斩获 ICCV 2021 最佳论文奖!中国学者占「半壁江山」
- 122Echarts - 关系图(Les Miserables)
- WEB 视频开发-视频保护广告艺术
- 【合规性检查-Fitness】基于Token重演的拟合度评估方法
- 【毕业设计】java基于微信小程序高校闲置物品交易平台小程序 闲置物品交易微信小程序 闲置物品交易小程序
- 自媒体创作新形式—喜马拉雅有声书
- 自动化爬取json_python接口自动化33-json解析神器jsonpath
- SpringMVC+Vue实现前后端的农业信息管理系统