当前位置: 首页 > article >正文

go语言的成神之路-筑基篇-gin框架渲染模板

第一节-gin框架渲染模板

因为电脑打不开了,所以用朋友的电脑来写的,也是体验了一次从零开始用vscode配置环境,忙活了一上午才配置好环境。太难配置了。好了废话不多说开始今天的进修之旅。

今天开始gin框架的正式学习希望大家认真观看并检查自己的每行代码,一点点错误对于一个程序来说都是致命的错误。

1.通过css对页面进行渲染

css中渲染背景色

此处圈到的地方都注意一下

加载静态资源文件 

 

解析模板

上述是定义模板,在上节中说到了要三步走。

这里全都以users/index为例

渲染模板 

此处内容部分不做重点讲解,主要是看页面背景的变化。

效果展示 

可以看到页面的颜色发生了变化。默认的颜色是白色,现在颜色变成了css中的颜色,如果想要美化页面可以直接在css中进行渲染。

 2.防止标签被转义

在go语言中标签会被自动转移,为了防止被自动转移我们需要进行相关操作防止被转义。

这里还是以users/index为例。

默认情况

这里不难看出这并不是我们想要实现的效果,我们需要自定义函数来进行手动的转移操作才行。、

自定义函数

注意这里的函数名,要与后面保持统一。

 渲染模板

渲染函数这一部分与之前的相似,自是内容用script包裹住了。

应用自定义函数

这里对自定义函数做了一个应用,注意函数名要与上面定义的名字对应起来。 

全部代码部分展示

由于软件原因,这里就不对mod、sum部分代码进行展示了,其余部分代码如下:

目录

statics/index.css

body{
    background-color: #646060;
}

template/post/index.html

{{ define "post/index.html" }}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h1>这是post目录</h1>
    {{ . }}
</body>
</html>
{{ end }}

template/users/index.html

{{ define "users/index.html" }}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="/xxx/index.css">
    <title>Document</title>
</head>
<body>
    <h1>这是users目录</h1>
    {{ .title | safe }}
    <a href="#">展示</a>
</body>
</html>
{{ end }}

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>gin框架模板渲染</title>
</head>
<body>
    {{ . }}
</body>
</html>

main.go

package main
import (
	"github.com/gin-gonic/gin"
	"html/template"
)
func main()  {
	r := gin.Default()

	// 静态资源
	r.Static("/xxx","./statics")

	// gin框架给模板自定义函数
	r.SetFuncMap(template.FuncMap{
		"safe":func(str string) template.HTML {
			return template.HTML(str)
		},
	})
	// 解析模板
	r.LoadHTMLFiles("template/index.html","template/post/index.html","template/users/index.html")

	r.GET("/post/index",func(c *gin.Context)  {

		// 渲染模板
		c.HTML(200,"post/index.html",gin.H{
			"title":"post",
		})
	})

	r.GET("/users/index",func(c *gin.Context)  {

		// 渲染模板
		c.HTML(200,"users/index.html",gin.H{
			"title":"<script>alert('111')</script>",
		})
	})

	// 启动服务
	r.Run(":1205")
}

第二节-gin框架返回json

json数据的格式是用途较为广泛的一类格式,转为json格式的数据就显得尤为重要。

以下是两种方法来进行格式的转换。

方法一、使用map返回json格式数据

 注:此处的map[string]interface可以用gin.H代替。

方法二、使用结构体返回json格式数据

 

代码展示 

package main
import(
	"github.com/gin-gonic/gin"
)
func main()  {
	r:=gin.Default()

	// 方法一、使用map
	data:=map[string]interface{}{
		"name":"VON",
		"age":18,
		"message":"hello",
	}
	r.GET("/json_map",func(c *gin.Context){
		c.JSON(200,data)
	})
		
	// 方法二、使用结构体 灵活使用tag 可以自定义json的key 可以自定义json的格式
	type message struct{
		Name string `json:"name"`
		Age int `json:"age"`
		Message string `json:"message"`
	}
	r.GET("/json_struct",func(c *gin.Context){
		// 
		c.JSON(200,message{
			Name:"VON",
			Age:18,
			Message:"hello",
		})
	})

	r.Run(":1205")
}

第三节-gin框架获取querystring参数

Query获取请求

DefaultQuery获取请求

Defaultquery和query不同的是他有两个参数,第一个和query一样,第二个是默认值。

因为传入的值与第一个参数不一致,所以会返回默认值,也就是somebody

GetQuery获取请求

getquery有两个参数,第二个参数是bool类型的参数。

取不到的时候返回的是条件语句中的内容。

传递多个参数

第四节 -gin获取form参数

对请求做出响应

当后端对前端发出的请求不做任何处理的时候页面会出现404错误。

 

一次请求对应一个响应

一次请求对应一个响应

一次请求对应一个响应

对POST请求做处理,使得进行POST请求的时候访问index.html页面,并且将数据传递给该页面进行渲染。

效果展示

 

第五节-gin获取URL路径参数

根据输入的url进行渲染

这里列举两个简单的例子来进行说明

后端代码部分展示

目录

第一节-gin框架渲染模板

1.通过css对页面进行渲染

css中渲染背景色

​编辑

加载静态资源文件 

解析模板

渲染模板 

效果展示 

 2.防止标签被转义

默认情况

自定义函数

 渲染模板

​编辑

应用自定义函数

全部代码部分展示

目录

statics/index.css

template/post/index.html

template/users/index.html

index.html

main.go

第二节-gin框架返回json

方法一、使用map返回json格式数据

方法二、使用结构体返回json格式数据

代码展示 

第三节-gin框架获取querystring参数

Query获取请求

DefaultQuery获取请求

GetQuery获取请求

传递多个参数

第四节 -gin获取form参数

对请求做出响应

效果展示

第五节-gin获取URL路径参数



http://www.kler.cn/a/418573.html

相关文章:

  • IDEA全局设置-解决maven加载过慢的问题
  • 蓝队基础(泷羽sec)
  • vue多页面应用集成时权限处理问题
  • hive3.1.3安装及基本例子
  • CCF 第一届算法竞赛 CACC 考题回忆
  • 详解QtPDF之 QPdfLink
  • 《datawhale2411组队学习 模型压缩技术7:NNI剪枝》
  • Angular v19 (三):增量水合特性详解 - 什么是水合过程?有哪些应用场景?与 Qwik 相比谁更胜一筹?- 哪个技术好我就学哪个,这就是吸心大法吧
  • 使用 client-go 实现 Kubernetes 节点 Drain:详解与实战教程
  • C_接口函数
  • 特性标记清理:GitHub Actions 来帮忙!
  • colorthief.js(图像中自动提取出主色调、调色板或者平均颜色)源码解析MMCQ算法
  • SnowFlake
  • 如何正确使用 GitHub API 获取特定版本信息:详解错误排查与解决方案
  • Word - 图片右键保存
  • Scala关于成绩的常规操作
  • 华为云云连接+squid进行正向代理上网冲浪
  • 【RabbitMQ 消息列队测试之:调试技巧】
  • 【Python数据分析五十个小案例】使用自然语言处理(NLP)技术分析 Twitter 情感
  • 初级数据结构——邻接表
  • 使用图结构增强RAG架构,一文详解LightRAG
  • docker安装clickhouse(单机版)
  • 解决Qt堆栈窗口内子窗口大小不一致的问题
  • HTML5+JavaScript实现消消乐游戏
  • Flask项目入门—request以及Response
  • C与指针。