基于Gin框架的web后端开发(四): 获取FORM表单参数

地精撕裂者
• 阅读 2592

我们常用POST请求发送FORM表单数据,这种方式相对于GET方式更加安全。


这里先放一个我写的简陋的水平居中的登录页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>login</title>
</head>
<body>
<div style="display: flex; justify-content: center; align-items: center; height: calc(100vh)">
    <form action="/login" method="post" novalidate autocomplete="off">
        <div>
            <label for="username">username:</label>
            <input type="text" name="username" id="username">
        </div>
        <br>
        <div>
            <label for="password">password:</label>
            <input type="password" name="password" id="password">
        </div>
        <br>
        <div>
            <input type="submit" value="登录" style="float: right">
        </div>
    </form>
</div>
</body>
</html>

登录页的效果是这样的:
基于Gin框架的web后端开发(四): 获取FORM表单参数


好了,接下来,把form表单发送给服务器的post请求也加上:

package main

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

func main() {
    r := gin.Default()
    r.LoadHTMLFiles("./login.html", "./index.html")
    r.GET("/login", func(c *gin.Context) {
        c.HTML(http.StatusOK, "login.html", nil)
    })
    r.POST("/login", func(c *gin.Context) {
        //等待结束后发送过来的用户名和密码,这里PostFrom的key就是login.html里面的name
        username := c.PostForm("username")
        password := c.PostForm("password")
        c.HTML(http.StatusOK, "index.html", gin.H{
            "Name":     username,
            "Password": password,
        })
    })
    r.Run(":9090")
}

然后把post请求成功之后的前端页面也加上(欧~是的,这应该是最simple的全栈开发实践)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>index</title>
</head>
<body>
<h1>Hi~ {{ .Name }}</h1>
<p>Your password is {{ .Password }}</p>
</body>
</html>

最后在输入框中输入用户名和密码之后点击登录后,效果如下:
基于Gin框架的web后端开发(四): 获取FORM表单参数


和GET请求的DefaultQuery、GetQuery类似,POST请求也有DefaultPostForm和GetPostForm,这里只讲一下我常用的GetPostForm:
基于Gin框架的web后端开发(四): 获取FORM表单参数

tips: 自己写服务的时候如果404可以试一下关掉梯子(如果有的话)


参考: bilibili
点赞
收藏
评论区
推荐文章
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Firefox数据抓包分享
啥是POST请求呢?我们在做一些信息提交的时候比如注册,登录这时候我们做的就是POST请求,POST的参数不会直接放在URL上,会以Form表单的形式将数据提交给服务器。我们来登录一下ip.16yun.cn:817还有就是请
Stella981 Stella981
3年前
Python爬虫之用脚本登录Github并查看信息
前言分析目标网站的登录方式目标地址:https://github.com/login登录方式做出分析:第一,用form表单方式提交信息,第二,有csrf\_token,第三,是以post请求发送用户名和密码时,需要第一次get请求的cookie第四,登录成功以
Wesley13 Wesley13
3年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Easter79 Easter79
3年前
SpringMVC 页面传递参数到controller的五种方式
一共是五种传参方式:一:直接将请求参数名作为Controller中方法的形参public Stringlogin(Stringusername,Stringpassword) :解释:括号中的参数必须与页面Form表单中的name名字相同二:使用@RequestParam绑定请求参数参数值举例:publicStri
Wesley13 Wesley13
3年前
PHP 文件上传的原理及案例分析
原理将客户端文件上传至服务器端,在服务器端临时存储,再将服务器端临时存储的文件移至指定位置实现文件上传需要的知识点:前端页面1.form表单必须是用post发送方式,因为get会将参数带到url中,而上传的文件转换后字符会很长,而且也是为了安全性2.form表单需要使用enctype
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Stella981 Stella981
3年前
CAS 实现站内单点登录及实现第三方 OAuth、OpenId 登录(二)
一、登录表单<form:form id"loginForm" method"post" commandName"${commandName}" htmlEscape"true"    <form:errors path"" element"em" cssClass"" /    <c:if t
Stella981 Stella981
3年前
Extjs校验配置项
Extjsform组件1、Ext.form.Action配置项:success:执行成功后回调的函数,包括两个参数:form和actionfailure:执行失败后回调的函数,包括两个参数:form和actionmethod:表单的提交方式,有效值包括GET、POSTparams:传递到请求中的参数url:动作
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
5个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(