zoukankan      html  css  js  c++  java
  • Form绑定

    其实本质是将c中的request中的body数据解析到form中。

    1. 方法一

    package main
    
    import (
    	"github.com/gin-gonic/gin"
    	"net/http"
    	"fmt"
    )
    
    type Login struct {
    	User     string `form:"username" json:"user" uri:"user" xml:"user"  binding:"required"`
    	Password string `form:"password" json:"password" uri:"password" xml:"password" binding:"required"`
    }
    
    func main() {
    	router := gin.Default()
    	// Form 绑定普通表单的例子
    	// Example for binding a HTML form (user=hanru&password=hanru123)
    	router.POST("/loginForm", func(c *gin.Context) {
    		var form Login
    		//方法一:对于FORM数据直接使用Bind函数, 默认使用使用form格式解析,if c.Bind(&form) == nil
    		// 根据请求头中 content-type 自动推断.
    		if err := c.Bind(&form); err != nil {
    			c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
    			return
    		}
    
    		if form.User != "hanru" || form.Password != "hanru123" {
    			c.JSON(http.StatusUnauthorized, gin.H{"status": "unauthorized"})
    			return
    		}
    
    		c.JSON(http.StatusOK, gin.H{"status": "you are logged in"})
    	})
    
    	router.Run(":8080")
    }

    2. 方法二

    package main
    
    import (
    	"github.com/gin-gonic/gin"
    	"github.com/gin-gonic/gin/binding"
    )
    
    type Login struct {
    	User     string `form:"username" json:"user" uri:"user" xml:"user"  binding:"required"`
    	Password string `form:"password" json:"password" uri:"password" xml:"password" binding:"required"`
    }
    
    func main() {
    	router := gin.Default()
    	router.POST("/login", func(c *gin.Context) {
    		var form Login
    		//方法二: 使用BindWith函数,如果你明确知道数据的类型
    		// 你可以显式声明来绑定多媒体表单:
    		// c.BindWith(&form, binding.Form)
    		// 或者使用自动推断:
    		if c.BindWith(&form, binding.Form) == nil {
    			if form.User == "hanru" && form.Password == "hanru123" {
    				c.JSON(200, gin.H{"status": "you are logged in ..... "})
    			} else {
    				c.JSON(401, gin.H{"status": "unauthorized"})
    			}
    		}
    	})
    
    	router.Run(":8080")
    }

  • 相关阅读:
    产品分析之核心功能篇
    激励CEO们最好的办法就是鼓励他们不要停止思考
    Javascript的一些经验总结
    微信为什么跟你想要的不一样?
    互联网思维西游记漫画分享
    交互设计与人类行为习惯的一些思考
    说说三四月的app审核中的几个坑
    程序员的玻璃心
    常用网站日志分析软件使用总结
    在你决定从事iOS开发前需要清楚的几个问题
  • 原文地址:https://www.cnblogs.com/yzg-14/p/13143851.html
Copyright © 2011-2022 走看看