由于本篇的内容需要涉及到一些静态资源的加载(get方法中打开的html页面),所以我们先进行静态资源配置,这里主要使用LoadHTMLGlob 加载html模板文件,使用StaticFS方法css、js及上传的文件。具体如下:
func setStaticFS(r *gin.Engine) {
r.LoadHTMLGlob("views/*")
r.StaticFS("/static", http.Dir("public/static"))
r.StaticFS("/upload", http.Dir("upload"))
}
一、post请求的分类
常用请求Headers中Content-Type的类型有text/plain、text/html、application/json、application/x-www-form-urlencoded、application/xml和multipart/form-data等。具体如下:
text/plain 纯文本
text/html HTML文档
application/json json格式数据
application/x-www-form-urlencoded 使用HTTP的POST方法提交的表单
application/xml xml格式数据
application/form-data主要是用来上传文件
二、API分组
gin提供了分组功能,便于把一些功能模块集中到一起,通过同一请求的URL前缀进行处理,我们使用分组功能,先把框架写出来,再构建具体的函数,如下:
api := r.Group("/api")
{
api.POST("/form_post", formPost)
api.POST("/json_post", jsonPost)
api.POST("/urlencoded_post", urlencodedPost)
api.POST("/json_and_form_post", jsonAndFormPost)
api.POST("/xml_post", xmlPost)
api.POST("/file_upload", fileUpload)
api.GET("/list", func(c *gin.Context) {
message := c.Query("message")
nick := c.DefaultQuery("nick", "anonymous")
c.JSON(http.StatusOK, gin.H{
"status": "SUCCESS",
"message": message,
"nick": nick,
})
})
}
通过该操作,我们完成了api路由分组。
三、功能实现
1、form 表单提交
上面路由分组中的/api/form_post调用的是后面的formPost方法,我们通过如下代码实现该方法:
api.POST("/form_post", formPost)
// 表单提交
func formPost(c *gin.Context) {
message := c.PostForm("message")
nick := c.DefaultPostForm("nick", "anonymous") // 没有获取到nick值时给一个默认值
log.Println(message, nick)
c.