go _web

连接端口  

hhtp.ListenAndServer("ip加端口",nil)

err := http.ListenAndServe(":9000", nil)

域名分页 

如 127.0.0.1:900/index

http.HandleFunc("/index ",index )

http.HandleFunc("/index", index)

后面的index是函数 前面的 才是定义 什么 我们浏览器 输出才会有什么

然后index里面有三步 

定义模板 解析模板 渲染模板 

解析模板 

template.ParseFiles(“文件夹路径”)

t, err := template.ParseFiles("go_web/chaptr01/base/base.html", "go_web/chaptr01/base/index2.html")
	if err != nil {
		fmt.Println("index2 ParseFiles err =", err)
		return
	}

渲染模板 

name := "小王子"
	t.ExecuteTemplate(w, "index2.html", name)

模板继承 block

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        *{
            margin: 0;
        }
        .nav{
            height: 50px;
            width: 100%;
            position: fixed;
            background-color:blue;
        }
        .main{
            margin-top:50px;
        }
        .menu{
            width: 20%;
            height: 100%;
            position: fixed;
            left: 0;
            background-color: blueviolet;
        }
        .content{
            text-align: center;
        }
    </style>
</head>
<body>
<div class="nav"></div>
<div class="main">
    <div class="menu"></div>
    <div class="content" center>
        {{block "content" .}}{{end}}
    </div>
</div>
</body>
</html>

在div content 里面定义 {{block “content”}}{{end}}

另一个文件中

{{template "base.html".}}
  {{/*//重新定义*/}}
{{define "content"}}
  <h1>这是index 页面</h1>
  <p> hello{{ . }}</p>
{{end}}

只需要template 上面定义的文件名 

当然 在main文件中 解析模板 时 也需要做出改变 

前面是 做好的模板文件名 后面是要使用模板的 文件名

t, err := template.ParseFiles("go_web/chaptr01/base/base.html", "go_web/chaptr01/base/index2.html")

使用到模板嵌套时 

渲染模板 也需要改变 变为 

name := "小王子"
	t.ExecuteTemplate(w, "index2.html", name)

define 方法名

下面的内同就能传进去

自定义标识符

默认标识符 是 {{}}

但是前端的 默认标识符也是 {{}}

为了防止出错 我们可以 自定义 

在index函数中 解析模板时 

//自定义模板 
t, err := template.New("index.html").Delims("{[", "]}").ParseFiles("go_web/chaptr02/index.html")
//非自定义
 	t, err := template.ParseFiles("go_web/chaptr01/home2.html")

xss攻击

跨站攻击

当博客评论时 输入框可以输入 js代码 当js代码没过滤时 很可能导致数据库被黑

或者别人写一个死循环 会给网页卡死

func xss(w http.ResponseWriter, r *http.Request) {
	//解析模板之前定义一个自定义函数

	t, err := template.New("xss.html").Funcs(template.FuncMap{
		"safe": func(str string) template.HTML {
			return template.HTML(str)
		},
	}).ParseFiles("go_web/chaptr02/xss.html")
	if err != nil {
		fmt.Println("parse template failed err =", err)
		return
	}
	str1 := " <script>alert(123)</script>"
	str2 := "<a href=\"index.html\">123456</a>"
	t.Execute(w, map[string]string{
		"str1": str1,
		"str2": str2,
	})
}

html代码

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <title>修改模板引擎标识符</title>
</head>
<body>
<div>

  <p>用户的评论是 {{ .str1}}</p>
  <p>用户的评论是 {{ .str2 |safe}}</p>


</div>
</body>
</html>

可以通过| safe (前面定义的自定义函数)来进行区分 像html化的代码 和不需要 html化的代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值