• gin系列- 渲染


    Gin渲染

    HTML渲染

    #main.go
    package main
    
    import (
    	"github.com/gin-gonic/gin"
    	"net/http"
    )
    
    func main() {
    	r := gin.Default()
    	r.LoadHTMLGlob("templates/**/*")   //模板解析
    	//r.LoadHTMLFiles("templates/posts/index.html", "templates/users/index.html")
    	r.GET("/posts/index", func(c *gin.Context) {
    		//HTTP请求
    		c.HTML(http.StatusOK, "posts/index.html", gin.H{  //模板渲染
    			"title": "zisefeizhu",
    		})
    	})
    
    	r.GET("/users/index", func(c *gin.Context) {
    		//HTTP请求
    		c.HTML(http.StatusOK, "users/index.html", gin.H{  //模板渲染
    			"title": "jingxing",
    		})
    	})
    	r.Run(":9090")   //启动server
    }
    
    #posts/index.html
    {{define "posts/index.html"}}
        <!DOCTYPE html>
        <html lang="en">
    
        <head>
            <meta charset="UTF-8">
            <meta name="viewport" content="width=device-width, initial-scale=1.0">
            <meta http-equiv="X-UA-Compatible" content="ie=edge">
            <title>posts/index</title>
        </head>
        <body>
        {{.title}}
        </body>
        </html>
    {{end}}
    
    
    #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">
            <meta http-equiv="X-UA-Compatible" content="ie=edge">
            <title>users/index</title>
        </head>
        <body>
        {{.title}}
        </body>
        </html>
    {{end}}
    


    自定义模板函数

    #main.go
    
    import (
    	"github.com/gin-gonic/gin"
    	"html/template"
    	"net/http"
    )
    
    func main() {
    	r := gin.Default()
    	//gin框架给模板添加自定义函数
    	r.SetFuncMap(template.FuncMap{
    		"safe": func(str string) template.HTML{
    			return template.HTML(str)
    		},
    	})
    	r.LoadHTMLGlob("./index.tmpl")
    	r.GET("/index", func(c *gin.Context) {
    		c.HTML(http.StatusOK, "index.tmpl", "<a href='https://www.cnblogs.com/zisefeizhu/'>zisefeizhu的博客</a>")
    	})
    
    	r.Run(":9090")   //启动server
    }
    
    在index.tmpl中使用定义好的safe模板函数
    #index.tmpl
    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
        <title>修改模板引擎的标识符</title>
    </head>
    <body>
    <div>{{ . | safe }}</div>
    </body>
    </html>
    

    静态文件处理

    #main.go
    import (
    	"github.com/gin-gonic/gin"
    	"html/template"
    	"net/http"
    )
    
    //静态文件
    //html 页面上用到的样式文件.css js文件 图片
    func main() {
    	r := gin.Default()
    	//加载静态文件
    	r.Static("/static", "./static")
    	r.LoadHTMLGlob("templates/**/*")
    	r.GET("/users/index", func(c *gin.Context) {
    		//HTTP请求
    		c.HTML(http.StatusOK, "users/index.html", gin.H{  //模板渲染
    			"title": "jingxing",
    		})
    	})
    
    	r.Run(":9090")   //启动server
    }
    
    #index.html    注意css 和js的配置 head   body
    {{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">
            <meta http-equiv="X-UA-Compatible" content="ie=edge">
            <link rel="stylesheet" href="/static/index.css">
            <title>users/index</title>
        </head>
        <body>
        {{.title}}
        <script src="/static/index.js"></script>
        </body>
        </html>
    {{end}}
    
    #index.js
    alert(123);
    
    #index.css
    body {
        background-color: cadetblue;
    }
    


    例子

    下载:http://sc.chinaz.com/moban/191216115340.htm#down

    import (
    	"github.com/gin-gonic/gin"
    	"html/template"
    	"net/http"
    )
    
    //静态文件
    //html 页面上用到的样式文件.css js文件 图片
    func main() {
    	r := gin.Default()
    	//加载静态文件
    	r.Static("/static", "./static")
    	r.LoadHTMLGlob("templates/**/*")
     
    	//返回从网上下载的模板
    	r.GET("/home", func(c *gin.Context) {
    		c.HTML(http.StatusOK, "index.html", nil)
    	})
    
    	r.Run(":9090")   //启动server
    }
    
    index.html 改css js png路径为static
    


    JSON渲染

    package main
    
    import (
    	"github.com/gin-gonic/gin"
    	"net/http"
    )
    
    func main() {
    	r := gin.Default()
    	r.GET("/json", func(c *gin.Context) {
    		//方法1 使用map
    		data :=  map[string]interface{}{
    			"name": "zisefeizhu",
    			"message": "hello world",
    			"age": 18,
    		}
    		//方法2 字节拼接json    //gin.H 就是map类型
    		c.JSON(http.StatusOK, gin.H{
    			"name": "jingxing",
    			"message": "hello world",
    			"age": 18,
    		})
    		c.JSON(http.StatusOK, data)
    		//方法3 使用结构体
    		//使用结构体      
        //灵活使用tag对结构体字段做定制化操作
    		type msg struct{    //字段要外部访问不能小写
    			Name string `json:"user"`
    			Message string
    			Age int
    		}
    		data3 := msg{
    			Name:    "yike",
    			Message: "hello world",
    			Age:     21,
    		}
    		c.JSON(http.StatusOK, data3)  //json的序列化
    	})
    	r.Run(":9090")
    }
    

    获取querystring参数

    多用于Get请求

    package main
    
    import (
    	"github.com/gin-gonic/gin"
    	"net/http"
    )
    
    //querystring
    
    func main() {
    	r := gin.Default()
    
    	//GET请求URL ?后面的是querystring参数
    	//key=value格式,多个key-value用&连接
    	///web?query=zisefeizhu&age=22
    	r.GET("/web", func(c *gin.Context) {
    		////获取浏览器发请求携带的query String 参数
    		//方式1
    		name := c.Query("query")  //通过Query获取请求中携带的querystring参数
    		age := c.Query("age")
    		//方式2
    		//name := c.DefaultQuery("query","nothing")  //取不到用nothing
    		//方式3
        //name, ok := c.GetQuery("query")  //取到返回(值, true),取不到返回("",false)
    		//if !ok {
    		//	//取不到
    		//	name = "nothing"
    		//}
    		c.JSON(http.StatusOK, gin.H{
    			"name" : name,
    			"age" : age,
    		})
    	})
    	r.Run(":9090")
    }
    

    获取form参数

    POST请求

    package main
    
    import (
    	"github.com/gin-gonic/gin"
    	"net/http"
    )
    
    //获取form表单提交的参数
    //一次请求对应一次响应
    func main() {
    	r := gin.Default()
    	r.LoadHTMLFiles("./login.html","./index.html")
    	r.GET("/login", func(c *gin.Context) {
    		c.HTML(http.StatusOK, "login.html",nil)
    	})
    
    	//login post
    	r.POST("/login", func(c *gin.Context) {
    		//获取form表单提交的数据
    		//方法1
    		//username := c.PostForm("username")
    		//password := c.PostForm("password")  //取到就返回值,取不到就返回空字符串
    		//方法2   后面是默认值
    		//username :=  c.DefaultPostForm("username","nothing")
    		//password := c.DefaultPostForm("password", "123456")
    		//方法3
    		username, ok := c.GetPostForm("username")
    		if !ok {
    			username = "zisefeizhu"
    		}
    		password, ok := c.GetPostForm("password")
    		if !ok{
    			password = "xxx"
    		}
    
    		c.HTML(http.StatusOK, "index.html", gin.H{
    			"Name": username,
    			"Password": password,
    		})
    	})
    
    	r.Run(":9090")
    
    }
    


    获取URI路径参数

    package main
    //注意uri的匹配不要冲突
    import (
    	"github.com/gin-gonic/gin"
    	"net/http"
    )
    
    func main() {
    	r := gin.Default()
    
    	r.GET("/user/:name/:age", func(c *gin.Context) {
    		//获取路径参数
    		name := c.Param("name")
    		age := c.Param("age")   //string类型
    		c.JSON(http.StatusOK, gin.H{
    			"name": name,
    			"age": age,
    		})
    	})
    
    	r.GET("/blog/:year/:month", func(c *gin.Context) {
    		year := c.Param("year")
    		month := c.Param("month")
    		c.JSON(http.StatusOK, gin.H{
    			"year": year,
    			"month": month,
    		})
    	})
    	r.Run(":9090")
    }
    
    


  • 相关阅读:
    贪心 CodeForces 137B Permutation
    贪心 CodeForces 124B Permutations
    数学 SCU 4436 Easy Math
    模拟+贪心 SCU 4445 Right turn
    ACM配置指南
    ACM牛人博客
    ✅问题:Rails.ajax自定义请求
    Jbuilder(3300✨)
    关于keyCode, 键盘代码。 和零散的javascript知识。http://js2.coffee/(转化工具)
    ✅javascript 语法:附加子节点
  • 原文地址:https://www.cnblogs.com/zisefeizhu/p/12727195.html
Copyright © 2020-2023  润新知