gin ajax 获取请求参数,gin请求参数处理

本章介绍Gin框架获取请求参数的方式

1.获取Get 请求参数

Get请求url例子:/path?id=1234&name=Manu&value=111

获取Get请求参数的常用函数:

func (c *Context) Query(key string) string

func (c *Context) DefaultQuery(key, defaultValue string) string

func (c *Context) GetQuery(key string) (string, bool)

例子:

func Handler(c *gin.Context) {

//获取name参数, 通过Query获取的参数值是String类型。

name := c.Query("name")

//获取name参数, 跟Query函数的区别是,可以通过第二个参数设置默认值。

name := c.DefaultQuery("name", "sockstack")

//获取id参数, 通过GetQuery获取的参数值也是String类型,

// 区别是GetQuery返回两个参数,第一个是参数值,第二个参数是参数是否存在的bool值,可以用来判断参数是否存在。

id, ok := c.GetQuery("id")

if !ok {

// 参数不存在

}

}

提示:GetQuery函数,判断参数是否存在的逻辑是,参数值为空,参数也算存在,只有没有提交参数,才算参数不存在。

2.获取Post请求参数

获取Post请求参数的常用函数:

func (c *Context) PostForm(key string) string

func (c *Context) DefaultPostForm(key, defaultValue string) string

func (c *Context) GetPostForm(key string) (string, bool)

例子:

func Handler(c *gin.Context) {

//获取name参数, 通过PostForm获取的参数值是String类型。

name := c.PostForm("name")

// 跟PostForm的区别是可以通过第二个参数设置参数默认值

name := c.DefaultPostForm("name", "sockstack")

//获取id参数, 通过GetPostForm获取的参数值也是String类型,

// 区别是GetPostForm返回两个参数,第一个是参数值,第二个参数是参数是否存在的bool值,可以用来判断参数是否存在。

id, ok := c.GetPostForm("id")

if !ok {

// 参数不存在

}

}

3.获取URL路径参数

获取URL路径参数,指的是获取 /user/:id 这类型路由绑定的参数,这个例子绑定了一个参数id。

获取url路径参数常用函数:

func (c *Context) Param(key string) string

例子:

r := gin.Default()

r.GET("/user/:id", func(c *gin.Context) {

// 获取url参数id

id := c.Param("id")

})

4.将请求参数绑定到struct对象

前面获取参数的方式都是一个个参数的读取,比较麻烦,Gin框架支持将请求参数自动绑定到一个struct对象,这种方式支持Get/Post请求,也支持http请求body内容为json/xml格式的参数。

例子:

下面例子是将请求参数绑定到User struct对象。

// User 结构体定义

type User struct {

Name string `json:"name" form:"name"`

Email string `json:"email" form:"email"`

}

通过定义struct字段的标签,定义请求参数和struct字段的关系。

下面对User的Name字段的标签进行说明。

struct标签说明:

标签

说明

json:"name"

数据格式为json格式,并且json字段名为name

form:"name"

表单参数名为name

提示:你可以根据自己的需要选择支持的数据类型,例如需要支持json数据格式,可以这样定义字段标签: json:"name"

下面看下控制器代码:

r.POST("/user/:id", func(c *gin.Context) {

// 初始化user struct

u := User{}

// 通过ShouldBind函数,将请求参数绑定到struct对象, 处理json请求代码是一样的。

// 如果是post请求则根据Content-Type判断,接收的是json数据,还是普通的http请求参数

if c.ShouldBind(&u) == nil {

// 绑定成功, 打印请求参数

log.Println(u.Name)

log.Println(u.Email)

}

// http 请求返回一个字符串

c.String(200, "Success")

})

ShouldBind有一系列函数,大致就是把前面的方式绑定到结构体的方式,如:ShouldBindUri()、ShouldBindQuery()等等,用法和ShouldBind类似,这里就不展开介绍了

提示:如果你通过http请求body传递json格式的请求参数,并且通过post请求的方式提交参数,则需要将Content-Type设置为application/json, 如果是xml格式的数据,则设置为application/xml

5.获取请求头信息

获取请求头的常用函数:

func (c *Context) GetHeader(key string) string

例子:

func Handler(c *gin.Context) {

//获取请求头Host的值

host := c.GetHeader("Host")

//控制台输出host的值

fmt.Println(host)

}

6.获取客户IP

r := gin.Default()

r.GET("/ip", func(c *gin.Context) {

// 获取用户IP

ip := c.ClientIP()

})

出处gin从入门到实践更多精彩文章,请关注我的博客SOCKSTACK,分享我的工作经验。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/561168.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python argparse_Python 命令行之旅:argparse、docopt、click 和 fire 总结篇

本文首发于HelloGitHub公众号,并发表于Prodesire 博客。一、前言在近半年的 Python 命令行旅程中,我们依次学习了 argparse、docopt、click 和 fire 库的特点和用法,逐步了解到 Python 命令行库的设计哲学与演变。 本文作为本次旅程的终点&am…

阻塞式和非阻塞式udp传输_NIO非阻塞网络编程三大核心理念

本次开始NIO网络编程,之前已经说过BIO,对于阻塞IO里面的问题一定有了清晰的认识,在JDK1.4版本后,提供了新的JAVA IO操作非阻塞API,用意替换JAVA IO 和JAVA NetWorking相关的API。NIO其实有个名称叫new IO。(一)NIO① 介…

如何查看服务器文件进程,如何查看服务器上的所有进程

如何查看服务器上的所有进程 内容精选换一换华为云SSL证书管理服务帮助中心,为用户提供产品简介、用户指南、常见问题等技术文档,帮助您快速上手使用云证书管理服务。分析辅助软件是一款支持部署到多台服务器目标环境上,实现对整个业务集群的…

python minimize_Python数学规划案例一

Python数学规划案例一问题、模型、数据、算法、结果,统一地表述,是习惯也是效率。我的公众号数学规划模型表述习惯采用五个部分:Set, Data, Variable, Objective, Constraints;每个Notation,采用一个主字符&#xff0c…

python中方法调用方法_Python中实现结构相似的函数调用方法

python的dict用起来很方便,可以自定义key值,并通过下标访问,示例如下: >>> d {key1:value1, ... key2:value2, ... key3:value3} >>> print d[key2] value2 >>> lambda表达式也是很实用的东东&#x…

python安卓开发实例_python服务器与android客户端socket通信实例

本文实例讲述了python服务器与android客户端socket通信的方法。分享给大家供大家参考。具体实现方法如下: 首先,服务器端使用python完成,下面为python代码: #server.py import socket def getipaddrs(hostname):#只是为了显示IP&a…

java map转string_【库学科技】32道常见的Java基础面试题

内容来源于图灵 侵删。什么是 Java 虚拟机(JVM)?为什么 Java 被称作是“平台无关的编程语言”?Java 虚拟机是一个可以执行 Java 字节码的虚拟机进程。Java 源文件被编译成能被 Java 虚拟机执行的字节码文件。Java 被设计成允许应用程序可以运行在任意的平…

cout输出字符串_leetcode C++题解系列-042 字符串相乘

题目给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。示例 1:输入: num1 "2", num2 "3"输出: "6"示例 2:输入: num1 "123", num2 "456&quo…

python序列类型举例说明_Python(第八课,序列类型)

引言: 我们之前学过整数,浮点数,字符串,今天带来的更具有包容性。 今天带来的是高级数据类型,包括列表,元组,集合和字典。根据他们特性不同,可以分为序列类型,集合类型&a…

上传附件_留学落户|上传附件预审时一定一定要注意的问题!

点击上方蓝色字体,关注启铭君。www.minqifudao.com启铭君相信大家都知道,从2019年留学落户“一网通办”新系统上线,可以在网上进行材料申报,“让数据多走路,让群众少跑腿”。在新系统中填报资料,怎样才能做…

python获取对象的大小_Python实现计算对象的内存大小示例

本文实例讲述了Python实现计算对象的内存大小。分享给大家供大家参考,具体如下: 一般的sys.getsizeof()显示不了复杂的字典。 查看类中的内容: def dump(obj): for attr in dir(obj):#dir显示类的所有方法 print(" obj.%s %r" % (…

python斐波那契数列30_python的30个骚操作

1、冒泡排序2、计算x的n次方的方法3、计算a*a b*b c*c ……4、计算阶乘 n!5、列出当前目录下的所有文件和目录名6、把一个list中所有的字符串变成小写:7、输出某个路径下的所有文件和文件夹的路径8、输出某个路径及其子目录下的所有文件路径9、输出某个路径及其子…

sqlplus 镜像_【Docker】拉取Oracle 11g镜像配置

以下是基于阿里云服务器Centos 7操作1.拉取Oracle11g镜像docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g等待下载即可……下载完成后,使用下列命令查看镜像docker images从上图可以清楚看到镜像拉取完毕2.创建容器docker run -d -p 1521:1521 -…

python中值滤波介绍_Python 实现中值滤波、均值滤波的方法

红包:Lena椒盐噪声图片:# -*- coding: utf-8 -*- """ Created on Sat Oct 14 22:16:47 2017 author: Don """ from tkinter import * from skimage import io import numpy as np imio.imread(lena_sp.jpg, as_greyTrue) …

竖向图片插入_Word小技巧:让你的图片文字排版更有创意

想在头条中发表文章或者写论文,插入的图片太单调?今天小编就简单跟大家分享几个小技巧,图片搭配文字让你的版面更有可读性。第一种:最简单的横向文字排版具体做法:在word中插入图片后,插入一个文本框后输入…

11有没有压力感应_特殊感应器赋予机械手多维触感

最新研发的机械触感装备,已经不仅具有可伸展的韧性,还具有感知压力、形变和拉力的功能,将为软体机器人、虚拟现实(VR)和现实增强(AR)等设备带来革命性的巨变。美国康乃尔大学(Cornell University)工程学院副教授谢泼德(Rob Shepherd)说&#…

如何用手机打开dcm格式图片_如何防止自己的图片被盗用?这 4 招教你优雅加水印...

出门旅游一趟,好不容易拍到一组相当满意的图片。想要把这些图片上传到社交平台,如何才能让大家一看就知道这是自己拍的作品,同时又防止盗图呢?答案是在图片上加上自己的水印,这次有用功将和大家分享下,如何…

python 堆_面试再问你什么是堆和栈,你就把这篇文章甩给他

栈:管程序如何运行的,程序如何执行,如何处理数据。(局部变量其实也是存在栈中的,引用数据类型在栈中存的是地址引用)(栈的空间就不需要那么大了)堆:管数据存储的。(引用数据类型的存放,所以堆的空间是比较大的)生活理解…

3d 仪表盘_新一代标致2008官图发布 配备3D全息仪表盘

【太平洋汽车网 新车频道】标致发布了新一代2008的官图,新车基于PSA集团的CMP平台打造,采用了标致最新一代的家族式设计语言,造型风格极具辨识度。据悉,新一代2008将提供汽油、柴油和纯电动三种动力版本供消费者选择,其…

python人脸识别程序如何嵌入到app_只用Python就能写安卓,简单几步实现人脸识别的App...

最近闲来无事,研究研究在安卓上跑Python。 想起以前玩过的kivy技术,kivy[1]是一个跨平台的UI框架。当然对我们最有用的是,kivy可以把python代码打包成安卓App。但是由于安卓打包的工具链很长,包括android sdk打包java代码、ndk编译…