跟我一起学习GO语言012——表单操作

2019-10-13  本文已影响0人  搬砖人1314

      上一节我们介绍了搭建一个Web服务器,本节我们来看看通过表单让客户端和服务器方便的进行数据交互,首先我们来看看一个简单的例子:提交用户名密码,点击登陆,很多网站登陆操作。新建一个表单文件命名为:login.gtpl

表单例子

<html>
<head>
<title>登陆<title>
</head>
<body>
<form action=”http://127.0.0.1:9090/login”method=”post”>
用户名:<input type=”text”name=”username”>
    密码:<input type=”password” name=”password”>
               <input type=”submit” value=”登陆”>

</body>
</html>

      接下来递交表单到服务器的/login,当我们输入信息点击登陆之后,会跳转到服务器的路由login里面,我们要判断有什么方式传递过来的,是POST还是GET呢?如果你想深入了解POST和GET的区别建议你看看这篇文章,写得生动有趣,介绍比较透彻。

我们来看看http包怎么获取并处理login页面的form数据的。

例子
package main

import(
      “fmt”
      “html/template”
      “log”
      “net/http”
      “strings”
)

func syhelloName(w http.ResponseWriter,r*http.Request){
       r.ParseForm()//解析Url传递的参数,对于POST则解析响应包的主体(request body)
      //注意:如果没有调用ParseForm方法,下面无法获取表单的数据
      fmt.Println(r.Form)//这些信息是输出到服务器端的打印信息
      fmt.Println(“path”,r.URL.Path)
      fmt.Println(“scheme”,r.URL.Scheme)
      fmt.Println(r.Form[“url_long”])
      for k,v:=rang r.Form{
            fmt.Println(“key:”,k)
            fmt.Println(“val:”,strings.Join(v,””))
     }
    fmt.Fprintf(w http.ResponseWriter,r *http.Request){
            fmt.Println(“method:”,r.Method)//获取请求的方法
            if r.Method==”GET”{
                   t,_:=template.ParseFiles(“login.gtpl”)
                   t.Execute(w,nil)
            } else {
                r.ParseForm()
               //请求的是登陆数据,那么执行登陆逻辑判断
                fmt.Println(“username:”,r.Form[“username”])
               fmt.Println(“password:”,r.Form[“password”])

           }
}

func main(){
    http.HandleFunc(“/”,sayhelloName)//设置访问的路由
    http.HandleFunc(“/login”,login)
    err:=http.ListenAndServe(“:9090”,nil)//设置监听的端口
    if err !=nil{
       log.Fatal(“ListenAndServe:”,err)
    }

  }

}
     通过上面的代码我可以看出获取请求方法是通过r.Method来完成的,这是个字符串类型的变量,返回信息。    
     运行起来输入用户名和密码之后,发现在服务器端显示出响应的请求类型及你输入的用户名和密码。例子比较简单,但是已经把我们要介绍的信息有一个了解,下篇我们接着将表单的一些信息。

请开始你的表演,践行,践行,再践行。未完待续。。。

上一篇下一篇

猜你喜欢

热点阅读