首页 > 其他分享 >Context响应,重定向,自定义函数,Abort

Context响应,重定向,自定义函数,Abort

时间:2023-04-10 21:33:23浏览次数:42  
标签:http func 自定义 html Abort Context gin router

前言:

Context 对象提供了很多内置的响应形式,JSON、HTML、Protobuf 、MsgPack、Yaml 、 String等。它会为每一种形式都单独定制一个渲染器。

Context是Gin最重要的部分。它允许我们在中间件之间 传递变量,管理流程,验证请求的JSON 并 呈现JSON响应。

正文:

 

content响应字符串,json,及重定向

jsonp 解决跨域访问问题

 

c.JSONP(200, gin.H{
        "status": "success",
        "code":   800,
})

重定向 到 百度

c.Redirect(http.StatusFound, "https://www.baidu.com")

 

重定向到站内地址

c.Request.URL.Path = "/success"

router.HandleContext(c)

 

响应字符串,json,及重定向实例:

func main() {
    router := gin.Default()
    router.GET("index", func(c *gin.Context) {
        //响应文本
        //c.String(200, "hello  this is index ")

        //响应json
        /*c.JSON(200, gin.H{
            "status": "success",
            "code":   800,
        })*/

        //响应jsonp 解决跨域访问问题
        /*c.JSONP(200, gin.H{
            "status": "success",
            "code":   800,
        })*/

        //获取请求信息
        //c.String(http.StatusOK, c.Request.Method+"\n")
        //c.String(http.StatusOK, c.Request.RequestURI+"\n")
        //c.String(http.StatusOK, c.Request.RemoteAddr+"\n")

        //重定向 到 百度
        //c.Redirect(http.StatusFound, "https://www.baidu.com")

        //重定向到站内地址
        c.Request.URL.Path = "/success"
        router.HandleContext(c)

    })

    router.GET("success", func(c *gin.Context) {
        c.String(http.StatusOK, "login success")
    })

    router.Run()
}

content加载html

加载静态文件夹

router.Static("img", "static/image")

加载某个文件

router.StaticFile("/1.jpg", "static/image/1.jpg")

加载html文件

router.LoadHTMLGlob("view/*")

加载多层次文件夹下的html

router.LoadHTMLGlob("view/**/*")

加载html页面

c.HTML(http.StatusOK, "index.html", gin.H{

"title": "index.html ...",

"name":  "加载html模板",

})

 

html文件里面需要使用define:

{{define "user/index.html"}}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<p>user {{.title}}</p>
<p>user {{.name}}</p>
</body>
</html>
{{end}}

html中自定义函数的使用

// 自定义函数
func Sum(a, b int) int {
    return a + b
}
main调用:
//设置全局自定义函数 要写在LoadHTMLGlob前面
    router.SetFuncMap(template.FuncMap{
        "sum": Sum,
    })

    //加载多层次文件夹下的html
    router.LoadHTMLGlob("view/**/*")

html中直接使用即可:
<p>{{sum 6 8}}</p>

修改模板分隔符:

router.Delims("{{","}}")  //修改渲染的分隔符

 

 

Abort() 阻止调用后面处理函数,当前函数后面代码还可以执行

c.Abort实例:

func loginMiddleware(c *gin.Context) {
   c.Redirect(http.StatusFound, "http://www.baidu.com") //跳转
   c.Abort() //不加这个abort后续代码还会执行
   return
   fmt.Println("hello login middleware")
}
func main() {
   router := gin.Default()
   router.GET("login", loginMiddleware, func(c *gin.Context) {
      fmt.Println("hello lgoin")
   })
   router.Run(":8000")
}

c.Set,c.Get实例

用来中间件向其他处理器传递数据

 

只在当前上下文环境生效,可以跨处理器传递数据

router.GET("login", func(c *gin.Context) {

   c.Set("status", "login")

   status, _ := c.Get("status")

 

   c.String(http.StatusOK, status.(string))

   c.String(http.StatusOK, c.GetString("status"))

})

//获取不到status值,因为不是同一个请求

router.GET("logout", func(c *gin.Context) {

   c.String(http.StatusOK, c.GetString("status"))

})

cookie实例:

router.GET("/setcookie", setCookie)

router.GET("/getcookie", getCookie)

 

func setCookie(c *gin.Context) {

   c.SetCookie("user_name", "lampol", 0, "/", "localhost", true, true)

}

func getCookie(c *gin.Context) {

   name, _ := c.Cookie("name")

   c.String(http.StatusOK, name)

}

完结

 

标签:http,func,自定义,html,Abort,Context,gin,router
From: https://www.cnblogs.com/ypeih/p/17304382.html

相关文章

  • ES搜索框架--自定义评分规则
    一、评分规则需求按照用户画像(不同的标签分数)和用户省份在用户查询时,对查询结果进行自定义评分二、ES自定义评分方式参考:博客:https://blog.csdn.net/W2044377578/article/details/128636611官网:https://www.elastic.co/guide/en/elasticsearch/guide/master/function-score-query.......
  • vue iview table实现动态自定义表头
    一、前言众所周知,iview中有一个表格组件Table,用于展示多条结构类似的数据。之前遇到过一个需求,要手动控制table的表头显示。就是假如table表格一共有10列数据,可以通过设置勾选,决定显示多少列二、代码为了代码的复用性,将配置页面单独抽成了组件,所以代码中会有组件之间传值父组件......
  • GORM自定义类型
    GORM自定义类型官网地址官方也有一个用来收集自定义的类型的仓库:https://github.com/go-gorm/datatypes场景时间类型初始的时间类型只有time.time类型,而我们习惯输入和展示的结构是形如2023-04-0812:12:12这种。这种格式需要被程序转化为time.time类型被orm使用,从数据库......
  • vue3中的自定义指令
    1.适用到自定义指令的场景 防抖、图片懒加载、一键Copy的功能、拖拽、页面水印、权限校验、输入框自动聚焦、相对时间转换、下拉菜单2.个人需求:在后台系统中,有很多表单提交组件,其中很多限制数字且限制条件不同。最初使用oninput="value=value.replace(/[^\d]/g,'')"来显示......
  • 文件批量改名高手,文件怎么随机改名,支持自定义生成长度
    如何批量重命名多个文件呢?有没有简单一点的方法呢?小编的回答当然是有的啦,下面一起来试试这个新的技巧,希望能给大家带来帮助。所需工具安装一个文件批量改名高手文件素材若干操作步骤步骤1:运行【文件批量改名高手】,在“文件批量重命名”中,导入文件,支持多种导入文件的方式步骤2:确定都......
  • 自定义运行时异常(非检查异常)
    写一个类继承Exception或其子类,然后在其他类中使用该异常注意:自定义的异常为运行时异常,因为运行时异常为非检查异常,并不需要程序员显示的抛出异常,但是为了更好的去检测程序,所以自定义运行时异常自定义运行时异常的使用形式://自定义构造带......
  • C# System.lnvalidOperationException:"A second operation started on this context
    项目中使用了依赖注入,这个错误在我项目中的原因:在async修饰的异步方法中,调用执行数据库操作的方法时,没有使用await关键字调用,因为没有等待该调用,所以在调用完成之前将继续执行该方法。因此,已处理了注入的依赖项。......
  • 自定义 DNS 服务
    如果你在使用Deployment运行CoreDNS,则该Deployment通常会向外暴露为一个具有静态IP地址Kubernetes服务。kubelet使用--cluster-dns=<DNS服务IP>标志将DNS解析器的信息传递给每个容器。DNS名称也需要域名。你可在kubelet中使用--cluster-domain=<默认本地......
  • 一统天下 flutter - widget 状态管理: 状态管理 - 自定义 controller
    一统天下flutterhttps://github.com/webabcd/flutter_demo作者webabcd一统天下flutter-widget状态管理:状态管理-自定义controller示例如下:lib\state\controller.dart/**状态管理-自定义controller**为自定义组件指定一个自定义controller后,就可......
  • 斯坦福 UE4 C++ ActionRoguelike游戏实例教程 08.创建主HUD & 自定义作弊指令
    斯坦福课程UE4C++ActionRoguelike游戏实例教程0.绪论概述本篇文章对应课程Lecture14,56-58节。本篇文章将会教你将之前创建的各种UMG控件统合到一个主控件上。此外,还会教你如何在C++中创建自定义作弊指令,并在游戏中使用控制台执行它。目录创建主HUD使用GameMode生成玩......