首页 > 其他分享 >gin常用操作

gin常用操作

时间:2023-09-22 14:35:59浏览次数:34  
标签:常用 http Context ctx StatusOK func 操作 gin

介绍

官方介绍

​ Gin 是一个用 Go (Golang) 编写的 Web 框架。 它具有类似 martini 的 API,性能要好得多,多亏了 httprouter,速度提高了 40 倍。 如果您需要性能和良好的生产力,您一定会喜欢 Gin

中文官网

使用

简单例子

package main

import (
	"net/http"
	"github.com/gin-gonic/gin"
)

func index(ctx *gin.Context) {
	ctx.JSON(http.StatusOK, gin.H{"首页": "Index"})
}

func main() {
	// 启动一个默认的路由
	r := gin.Default()
	// 一个get请求,相当于.net 的控制器
	r.GET("/sayHellow", func(c *gin.Context) {
		c.JSON(200, gin.H{
			"丐帮帮主": "乔峰",
		})
	})

	r.GET("/index", index)

	// 启动webservice
	r.Run(":7000")
}

Gin模板渲染

gin框架中使用 loadHTMLGlob() 或者 LoadHTMLFiles() 方法进行html模板渲染

HTML 渲染 | Gin Web Framework (gin-gonic.com)

func index(ctx *gin.Context) {

	fmt.Println("kkkkkkkkk", ctx.Keys["key1"]) // 获取中间件的key

	ctx.HTML(http.StatusOK, "index.html", gin.H{"imgUrl": "/static/images/g.jpg"})
}

// html 模板中可以用  .imgUrl 获取到数据

路由

r.GET("/books/:nian/:yue/:ri", timeRHandler)
func timeRHandler(ctx *gin.Context) {
	ctx.JSON(http.StatusOK, gin.H{
		"nian": ctx.Param("nian"),
		"yue":  ctx.Param("yue"),
		"ri":   ctx.Param("ri"),
	})
}
r.GET("/book/:action", paramHandler)
func paramHandler(ctx *gin.Context) {
	urlParm := ctx.Param("action")

	ctx.JSON(http.StatusOK, gin.H{
		"action": urlParm,
	})

}

文件上传

r.GET("/upload", func(c *gin.Context) {
		c.HTML(http.StatusOK, "upload.html", nil)
})

r.POST("/upload", uploadHandler)

func uploadHandler(c *gin.Context) {
	// 提取用户上传的文件
	fileObj, err := c.FormFile("filename")
	if err != nil {
		c.JSON(http.StatusInternalServerError, gin.H{
			"err": err,
		})
		return
	}
	// fileobj:上传的文件对象
	// fileobj.filename // 拿到上传文件的文件名
	filePath := fmt.Sprintf("./%s", fileObj.Filename)
	// 保存文件到本地的路径
	c.SaveUploadedFile(fileObj, filePath)
	c.JSON(http.StatusOK, gin.H{
		"msg": "OK",
	})
}
 <form action="/upload" method="POST" enctype="multipart/form-data">
        <input type="file" name="filename">
    <input type="submit">
 </form>

路由分组

r:=gin.Default()
book:=r.Group("/book")
{
    book.Get("/index",bookIndexHandler)
}

参数绑定

很多功能可以看官网,还有body只读一次问题处理

//curl.exe http://127.0.0.1:7000/dataBin -X POST -d "userName=jet222&pwd=3333333"
r.POST("/dataBin", DataBin)

type UserInfo struct {
	UserName string `json:"userName" form:"userName" binding:"required"`  // 验证非空 好像没起作用
	Password string `json:"pwd" form:"pwd"`
}


func DataBin(ctx *gin.Context) {
	if ctx.Request.Method == "POST" {
		var u UserInfo
		ctx.ShouldBind(&u) //  mvc 是直接传实体 默认的那种提交方式
        //ctx.ShouldBindJSON("")// json 绑定 等等很多的
		ctx.JSON(http.StatusOK, gin.H{"userName": u.UserName, "pwd": u.Password})
	}
}





func loginHandler(ctx *gin.Context) {
	if ctx.Request.Method == "POST" {
		var u UserInfo
		ctx.ShouldBind(&u)
		fmt.Println("---------------", u.UserName)
		if u.UserName == "jet" {
			// 10s 过期
			ctx.SetCookie("userName", u.UserName, 10, "/", "127.0.0.1", false, true)
			ctx.Redirect(302, "/index") // 页面跳转
		}

	} else {
		ctx.HTML(http.StatusOK, "login.html", nil)
	}
}

func cookieMiddleware(ctx *gin.Context) {
	username, err := ctx.Cookie("userName")
	if err != nil {
		ctx.Redirect(302, "/login")
		return
	}
	ctx.Set("username", username)
	ctx.Next()

}


相对来说简单点,看着文档就可以撸码

标签:常用,http,Context,ctx,StatusOK,func,操作,gin
From: https://www.cnblogs.com/jetjing/p/17722277.html

相关文章

  • centos7安装gparted分区工具及简单操作
    GPartedLinux磁盘扩展工具的使用......
  • JsonConvert相关操作
    #序列化时,忽略jsonproperty特性的作用:publicstaticclassJsonConvertExtension{publicstaticstringCustomSerialize(objectobj){JsonSerializerSettingssettings=newJsonSerializerSettings();settings.Formatting......
  • 常用正则表达式
    一、校验数字的表达式数字:[1]*$n位的数字:^\d{n}$至少n位的数字:^\d{n,}$m-n位的数字:^\d{m,n}$零和非零开头的数字:^(0|[1-9][0-9]*)$非零开头的最多带两位小数的数字:^([1-9][0-9]*)+(.[0-9]{1,2})?$带1-2位小数的正数或负数:^(-)?\d+(.\d{1,2})$正数、负数、和小数:^(-|+)?\d......
  • J2ME数组的复制及连接操作
    publicclassArrays{/***构造函数私有,这样可以保证只能通过:类名.静态方法或类名.静态方法来访问内部数据,*而不可以通过创建本类的对象来进行访问*/privateArrays(){}/***复制一个跟源byte数组一样的byte数组*@paramrSou......
  • javascript: The Best Guided Tour Plugin
    BestTourPluginsToGuideVisitorsThroughYourApphttps://yonkov.github.io/post/display-shepherd-only-once/https://www.jqueryscript.net/blog/best-guided-tour.htmlhttps://whatfix.com/blog/react-onboarding-tour/https://github.com/shipshapecode/shepherdhtt......
  • Linux系统添加历史命令操作记录(系统设置)
    Linux系统添加历史命令操作记录原创 浩道 浩道Linux 2023-09-2207:50 发表于广东收录于合集#linux学习320个关注上方浩道Linux,回复资料,即可获取海量Linux、Python、网络通信、网络安全等学习资料!前言大家好,这里是浩道Linux,主要给大家分享Linux、Python、网络通信、......
  • nginx指定文件类型进行gzip压缩
    如果在访问Nginx服务器时看到了.gz压缩文件,但其中也包括了不是JavaScript文件的内容,这可能是由于Nginx配置未正确过滤或限制哪些文件应该进行gzip压缩所致。在Nginx配置中,你可以使用gzip_types指令来指定哪些文件类型应该进行gzip压缩。以下是一些步骤来确保只有JavaScript文件......
  • Django 聚合查询中 加减操作
    查询订单的定金+支付金额-支付金额错误写法Order.objects.aggregate(sum=Sum(F('final_amt')+F('deposit_amt')-F('refund_amt'))))正确的信息Order.objects.aggregate(sum=Sum(('final_amt')+Sum('......
  • 操作mysql
    importpymysqlimportpandasaspdconnection=pymysql.connect( host='127.0.0.1', #服务器ip地址 port=3306, #mysql默认端口号 user="root", #用户名 password="123456", #密码 charset="utf8",#字符集 db="new_dev......
  • HTTP安全响应头配置之Access-Control-Allow-Origin
    目的Access-Control-Allow-Origin是从CrossOriginResourceSharing(CORS)中分离出来的。这个header是决定哪些网站可以访问资源,通过定义一个通配符来决定是单一的网站还是所有网站可以访问我们的资源。需要注意的是,如果定义了通配符,那么Access-Control-Allow-Credentials选项就......